{"id":15959285,"url":"https://github.com/pawamoy/keycut-data","last_synced_at":"2026-02-12T17:03:14.328Z","repository":{"id":30775934,"uuid":"34332718","full_name":"pawamoy/keycut-data","owner":"pawamoy","description":"Keyboard shortcuts data stored in YAML files","archived":false,"fork":false,"pushed_at":"2018-07-30T17:26:10.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-21T09:46:16.673Z","etag":null,"topics":["data","keyboard-shortcuts"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pawamoy.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":"2015-04-21T14:40:49.000Z","updated_at":"2022-06-14T17:29:53.000Z","dependencies_parsed_at":"2022-08-26T15:42:22.052Z","dependency_job_id":null,"html_url":"https://github.com/pawamoy/keycut-data","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pawamoy/keycut-data","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fkeycut-data","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fkeycut-data/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fkeycut-data/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fkeycut-data/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pawamoy","download_url":"https://codeload.github.com/pawamoy/keycut-data/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fkeycut-data/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29373837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["data","keyboard-shortcuts"],"created_at":"2024-10-07T14:41:09.014Z","updated_at":"2026-02-12T17:03:14.314Z","avatar_url":"https://github.com/pawamoy.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# keycut-data\nKeyboard shortcuts data stored in YAML files.\n\n* [Motivation](#motivation)\n* [Contributing](#contributing-or-using-data-to-build-a-keycut-tool)\n  * [Shortcut structure](#structure-of-a-shortcut)\n  * [Directory structure](#directory-structure-for-keycut-tools)\n  * [File names](#file-names)\n  * [File contents](#file-contents)\n  * [Syntax of sequences](#syntax-of-sequences)\n  * [Case sensitivity](#case-sensitivity)\n  * [Finer control](#finer-control-over-sequences-attributes)\n  * [Control keys](#control-keys)\n* [Todo-list](#todo)\n* [License](#license)\n\n\n## Motivation\nYou can find several databases on the web that aim at storing shortcuts\nfor a big variety of applications.\n\n**So why store them again as YAML in a git repository?**\n\nWell, first, because it is simple to manipulate and simple to maintain.\n\nSecond, because each of these databases lacks this or that application,\nbecause the way they provide shortcuts is not standardized, and because they\ndo not have APIs to let us build tools on it (or do they? If you do know\nsuch a website or database, please let me know!).\n\nAnd third, for me. As a user of many command-line utils, graphical\ninterfaces and websites (like most of you), I want a way to easily search\nthrough all the available shortcuts to improve my use of these apps.\n\nI often have been scared about starting to use such or such app because\nI didn't want to spend time reading and writing and learning (and binding?)\nAND FAILING TO REMEMBER and going back in the man page or on a web cheat-sheet\nto find again all the numerous shortcuts and hotkeys that were available or\nconfigurable.\n\n## Contributing or using data to build a keycut tool\n### Structure of a shortcut\nA shortcut is described by an action. This action is a string without newlines.  \nA shortcut is obviously composed of sequences of keys, written as an array\n(or list). Each sequence is equivalent to an other in terms of behavior.  \nA shortcut has three attributes:\n* `binding`, which tells if its related action is \"bindable\"\n  (i.e configurable to work with another sequence of keys).\n* `case_sensitive`, which tells if keys sequences are case sensitive or not.\n* `overwrite`, which, in case of inheritance, overwrites the inherited\n  shortcut sequences and attributes if set to true, and concatenates new\n  sequences to previous ones if false.\n\n#### Deprecated attributes\n- [hotkey](https://en.wikipedia.org/wiki/Keyboard_shortcut):\n  no real interest.\n\n- [sacred](https://en.wikipedia.org/wiki/Keyboard_shortcut#.22Sacred.22_keybindings):\n  no real interest, opinionated value, never 100% sacred.\n\n### Directory structure for keycut tools\nThe following is just a proposition.\nYou can of course organize directories as you want.\n\nThe `default` directory contains all community-or-authors-validated shortcuts.\nEvery other directories are \"profile\" directories. They contain user-defined\nshortcuts that inherit (or not) from the default shortcuts, overwriting some\nof them (or none).\n\n### File names\n`\u003cAPP\u003e[\u003cVERSION\u003e].yml` where `\u003cAPP\u003e` and `\u003cVERSION\u003e` can contain any character.\nAvoid spaces and other annoying characters.\n\n### File contents\nFirst of all, you should know that *mapping keys* order is not preserved\nwhen loading a YAML file. *Sequences* keep order.\n\nTo improve readability, put your inheritance instructions on top of the file,\nif any.\n\n```yaml\n# Explicit inheritance\ninherits: app.version\n# Implicit inheritance from previous version using semantic versioning\ninherits: true\n# Default\ninherits: false\n```\n\nThen, add your global variables, if any.  \nThe following values are the defaults.\n\n```yaml\nbinding: false\noverwrite: false\ncase_sensitive: auto\n# These global variables are handy if you don't want to add\n# these attributes in each of the following shortcuts\n```\n\nThen, add your shortcuts.\n\n```yaml\n# If you don't need categories, just use ONE category named 'shortcuts'\nSome category:\n- action: An action should start with a capital and end with a point.\n  keys: [\u003cSEQUENCE_1\u003e, ..., \u003cSEQUENCE_K\u003e]\n# The next section details syntax of SEQUENCES\n- action: \u003e\n    This action is long enough to take several lines in the YAML file.\n    I think we should have a line size limit of 79 characters, what do you\n    think ?\n  keys: [Ctrl-e]\n- action: you may want to use the short syntax if you have many short actions\n  keys: [y]\n- {action: Go left, keys: [←]}\n- {action: Go right, keys: [→]}\n- {action: Go up, keys: [↑]}\n- {action: Go down, keys: [↓]}\n\nHere is another category:\n- action: I am a binding, even if 'binding' is globally set to false :D\n  keys: [C]\n  binding: true\n```\n\n### Syntax of sequences\n* To disambiguate, each control key should use CapFirst format, and each\n  letter in a sequence part **with control keys** should be lower:  \n  `Ctrl-a`, `Ctrl-Shift-b` or `Ctrl-Alt-Del`, but not\n  `ctrl-a`, `ctrl-shift-B` or `CTRL-ALT-DEL`.  \n\n* When keys have to be entered ALL TOGETHER, use the `-` symbol:  \n  `Shift-kct` means Shift+k then c then t, **while keeping Shift down**.  \n  It is equivalent to writing `Shift-k Shift-c Shift-t`, but more concise\n  (in this case you could even write `KCT` but that's not the point).  \n  If Shift should have been released before typing c then t, then you would\n  have written `Shift-k ct` or `Shift-k c t` (only the first space is important).  \n  Sometimes, sequences with or without release of the control key are equals,\n  like `Ctrl-w Ctrl-w` in vim. For this shortcut you should then write the two:\n  `keys: [Ctrl-ww, Ctrl-w w]`.\n  \u003e Remember that control keys like Ctrl, Alt, Shift and others have to\n    be pressed BEFORE any other key in order for the sequence to be recognized.\n\n* For sequences using control keys and a hyphen `-`,\n  you might use the terms `Minus`, `Hyphen` or `Dash`, because `Ctrl--`\n  is not very easy to read, even if it is tolerated. If the sequence uses\n  a hyphen but no control keys, then just use `-`.\n\n### Case sensitivity\nTypically, if a sequence (or just a part of it) requires usage of a control\nkey (Ctrl, Alt, Shift, ...), then it is assumed to be case-insensitive.  \nThus, each sequence part **without any control key** is assumed to be\ncase-sensitive: `g` is not equal to `G`, `G` is equal to `Shift-g`.\nYou can override this behavior using the `case_sensitive` attribute:\n* `true`: case sensitive for all\n* `false`: case insensitive for all\n* `auto`: case insensitive for sequences with control keys,\n  case sensitive otherwise.\n\n### Finer control over sequences attributes\nSometimes you can have a key sequence that does not make use of control keys\nand is case-insensitive. It is also possible than some of equivalent sequences\nof a shortcut are bindings whereas others are not (hardcoded default).  \nYou can use a `binding` and `case_sensitive` attribute for each item in\na list of sequences, like this:\n\n```yaml\nbinding: false\ncase_sensitive: true\n\nshortcuts:\n- action: finer control\n  keys:\n    - seq: a\n      binding: true\n      case_sensitive: false\n# or even like this\n- action: global \u003c shortcut \u003c sequence\n  case_sensitive: false\n  binding: true\n  keys:\n    - seq: t\n      case_sensitive: true\n    - seq: a\n\n```\n\n### Control keys\nLiteral   | How you should write it\n--------- | -----------------------\nEscape    | Esc\nF1..12    | F1..12\n0..9      | 0..9 or Number(s)\nPause     | Pause\nInsert    | Ins\nDelete    | Del\nHome      | Home\nEnd       | End\nPage Up   | PageUp\nPage Down | PageDown\nSpace     | Space\nBackspace | Backspace\nPlus      | Plus or +\nMinus     | Minus or -\nEnter     | Enter\nArrows    | Up, Down, Left, Right, Arrow(s) or unicode\nShift     | Shift\nCaps Lock | CapsLock\nNum Lock  | NumLock\nAlt       | Alt (LeftAlt, RightAlt)\nAlt Gr    | AltGr\nControl   | Ctrl\nFunction  | Fn\nTabulate  | Tab\nWindows   | Windows only if Windows program, else Super, or unicode\nApple     | Apple, or unicode\n\n\n\n## Todo\n- [x] Find a standard to notate all control keys\n- [ ] Find a standard for sequences that take parameters\n- [ ] Use Unicode arrows and others characters ('apple' key), or literals?\n- [x] Case-sensitive attribute\n- [ ] Note attribute for details about shortcut use?\n- [ ] Operating System attribute? Example: not the same shortcuts\n      for firefox on Windows and on Linux\n- [x] Overwrite attribute for inheritant files.\n      False = concatenation of sequences.\n- [ ] System for i18n and l10n: copy all strings (actions)\n      into translation files?\n- [ ] Expand the concept of inheritance to profiles, with\n      this configuration written in a .keycutrc file?\n- [ ] Do shortcuts requiring for several non-control keys to be entered\n      together exist? Something like `k+e`? Never saw one like that.\n\n## License\nCopyright (c) 2015 Timothée Mazzucotelli\n\nThis Source Code is subject to the terms of the Mozilla Public License, v. 2.0. See the LICENSE file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpawamoy%2Fkeycut-data","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpawamoy%2Fkeycut-data","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpawamoy%2Fkeycut-data/lists"}