{"id":28512925,"url":"https://github.com/baskerville/keydouble","last_synced_at":"2025-07-04T05:30:58.863Z","repository":{"id":2466438,"uuid":"3438765","full_name":"baskerville/keydouble","owner":"baskerville","description":"A little X utility to enable the use of ordinary keys as modifiers","archived":false,"fork":false,"pushed_at":"2014-10-22T11:16:55.000Z","size":150,"stargazers_count":30,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-09T01:05:27.881Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"fzaninotto/screenshot-as-a-service","license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/baskerville.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-02-14T10:10:20.000Z","updated_at":"2024-07-01T08:14:12.000Z","dependencies_parsed_at":"2022-08-20T14:00:40.523Z","dependency_job_id":null,"html_url":"https://github.com/baskerville/keydouble","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/baskerville/keydouble","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fkeydouble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fkeydouble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fkeydouble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fkeydouble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/baskerville","download_url":"https://codeload.github.com/baskerville/keydouble/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fkeydouble/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263452443,"owners_count":23468641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-06-09T01:05:27.650Z","updated_at":"2025-07-04T05:30:58.854Z","avatar_url":"https://github.com/baskerville.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![logo](https://github.com/baskerville/keydouble/raw/master/logo/keydouble_logo.png)\n\n---\n\n## Warning\n\nThis is a quick hack and you should use [xcape](https://github.com/alols/xcape) instead.\n\n## Description\n\nThis little X utility enables the use of keys simultaneously as modifiers and ordinary keys,\n\nThe original key behavior is maintained under simple key press/release circumstances; but when a key is chorded, it can act as a modifier.\n\nE.g.: *left shift + b* produces *B*, but *left shift* tapped on its own might produce *parenleft*.\n\n## Install\n\nRun\n\n    make \u0026\u0026 make install\n\nBy default, this will install in `/usr/local/bin`. If you'd like it somewhere else, then copy the executables to your `bin` directory of choice.\n\n## Configuration\n\n`kdlaunch` honors a configuration file at `~/.keydoublerc`.\n\nThis file contains *both* xmodmap configuration and keydouble configuration.\n\nAn example configuration file is provided at `example/keydoublerc`.\n\nTo write your own, use `xev` to discover the natural keycode fo the key you'd like to alter. Then pick an unused keycode (working backwards from 255 is recommended). In `.keydoublerc`'s `natart_pairs`, add a pair `NATURAL_KEYCODE:UNUSED_KEYCODE` and then add two xmodmap commands: one mapping the natural keycode to the modifier of your choice, and the other mapping the unused keycode to the keysym you'd like to appear when you tap. You may also need to add the keysym to the appropriate modifier (i.e. `add control = Control_L`). See xmodmap's docs for details.\n\nIf you have a personal `xmodmap` configuration, copy it into this file, put it at `~/.xmodmaprc` (or change the relevant path in `kdlaunch`).\n\nOnce you've tested (try `kdlaunch`) and you're satisfied, add\n\n    kdlaunch \u0026\n\nto `~/.xinitrc`.\n\nTo kill `keydouble` run `kdkill`.\n\n## Dependencies\n\n- libxtst\n- xorg-xmodmap\n- dash\n\n## Strategy\n\nThe default keycode (called *natural*) of the original key is mapped to the modifier keysym and the keycode generated by `keydouble` (called *artificial*) under isolated key press/release is mapped to the original keysym.\n\nThe mapping is done by `xmodmap` and the *artificial* keycode generation by `keydouble`.\n\n## Troubleshooting.\n\n```Error!   Option \"-query\" not recognized```\n\nEither upgrade your x utils, or (what may be easier) hardcode your keyboard layout in kdlaunch. There's a comment pointing out where to put it.\n\n\nIf needed (i.e. if you encounter record module errors), the `record` X module can be loaded with:\n\n    Section \"Module\"\n        Load \"record\"\n    EndSection\n\nin `/etc/X11/xorg.conf`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaskerville%2Fkeydouble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaskerville%2Fkeydouble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaskerville%2Fkeydouble/lists"}