{"id":19205040,"url":"https://github.com/v-spassky/happens","last_synced_at":"2026-06-03T16:31:07.029Z","repository":{"id":173555455,"uuid":"649270115","full_name":"v-spassky/happens","owner":"v-spassky","description":"📝 Text keyboard layout switcher.","archived":false,"fork":false,"pushed_at":"2023-07-18T15:33:12.000Z","size":9657,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-29T17:24:47.256Z","etag":null,"topics":["hotkey-functionality","productivity"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/v-spassky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-04T10:33:16.000Z","updated_at":"2023-06-04T10:39:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"ad3e294b-e96f-46a2-9213-8269e93856e3","html_url":"https://github.com/v-spassky/happens","commit_stats":null,"previous_names":["v-spassky/happens"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/v-spassky/happens","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v-spassky%2Fhappens","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v-spassky%2Fhappens/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v-spassky%2Fhappens/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v-spassky%2Fhappens/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/v-spassky","download_url":"https://codeload.github.com/v-spassky/happens/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v-spassky%2Fhappens/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33874679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hotkey-functionality","productivity"],"created_at":"2024-11-09T13:10:57.936Z","updated_at":"2026-06-03T16:31:07.013Z","avatar_url":"https://github.com/v-spassky.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n### `happens`\n\nA keyboard layout switcher. Just highlight the text and press a preconfigured\nhotkey to switch the layout.\n\n### Installation\n\n1. Install `xdotool`:\n\n```\nsudo apt install xdotool\n```\n\n2. Grab the binary from releases and put it in any folder that is visible in\n`$PATH`.\n\n\u003e **Note:**\n\u003e\n\u003e If there is no  pre-built binary for your platform, you may build it\n\u003e yourself from source like this (Rust tooling is required):\n\n```\ngit clone https://github.com/v-spassky/happens.git\n```\n\n```\ncd happens\n```\n\n```\ncargo build --release\n```\n\n```\ncp target/release/happens ~/.local/bin/\n```\n\n```\nchmod u+x ~/.local/bin/happens\n```\n\n3. [Bind the binary to a hotkey](https://help.ubuntu.com/stable/ubuntu-help/keyboard-shortcuts-set.html.en)\nin your desktop environment.\n\n\u003cimg src=\"assets/hotkey-binding-example.png\" alt=\"ubuntu hotkey binding example\"/\u003e\n\nYou may set up the binding in two distinct modes:\n\n##### Using one of the precompiled tables:\n\n```\nhappens --table [ru-to-eng | eng-to-ru]\n```\n\nExample:\n\n```\nhappens --table ru-to-eng\n```\n\nWith such configuration, the program will work like this:\n\n\u003cimg src=\"assets/happensdemo.gif\" width=\"500\" alt=\"workflow demonstration\"/\u003e\n\n##### Using your own custom table:\n\n```\nhappens --from-file /\u003c...\u003e/table.txt\n```\n\nIn this case, the `table.txt` file should be formatted as follows:\n\n```\n\u003ckey1_before\u003e: \u003ckey1_after\u003e\n\u003ckey2_before\u003e: \u003ckey2_after\u003e\n...\n\u003ckeyN_before\u003e: \u003ckeyN_after\u003e\n```\n\nExample:\n\n```\na: R\ns: R\nd: R\nf: R\ng: R\n```\n\nWith the configuration above using the custom table shown above, the program\nwill work like this:\n\n\u003cimg src=\"assets/happensdemo2.gif\" width=\"500\" alt=\"workflow demonstration 2\"/\u003e\n\n### Development notes\n\nTo set up the program up and running, first set up a hotkey binding to call\nsuch command:\n\n```\nhappens --from-file /\u003c...\u003e/happens/samples/custom_table.txt --logfile-name /\u003c...\u003e/happens/logs.txt\n```\n\nAlternatively, if you want to use the a precompiled table:\n\n```\nhappens --table [ru-to-eng | eng-to-ru] --logfile-name /\u003c...\u003e/happens/logs.txt\n```\n\nThen, copy the binary from project folder to a folder, visible in `$PATH`\nand make it executable:\n\n```\ncargo build\n```\n\n```\ncp target/debug/happens ~/.local/bin/\n```\n\n```\nchmod u+x ~/.local/bin/happens\n```\n\nOr, as a shortcut:\n\n```\ncargo build \u0026\u0026 cp target/debug/happens ~/.local/bin/ \u0026\u0026 chmod u+x ~/.local/bin/happens\n```\n\nIt is also possible to run the program via a terminal like this:\n\n```\ncargo run -- --from-file /\u003c...\u003e/happens/samples/custom_table.txt\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv-spassky%2Fhappens","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fv-spassky%2Fhappens","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv-spassky%2Fhappens/lists"}