Skip to content

Advanced Templating 2, IntelliJ Emacs Keymaps

suntong edited this page Jun 20, 2021 · 7 revisions

Prefix

  • "easygen (and its template) is to YAML or JSON what XSLT (and its eXtensible Stylesheet Language Transformations rule) is to XML, but only more flexible and advanced".
  • IntelliJ Keymaps files are in the form of XML; i.e., I had to make a choice of weather to use XSLT to process it, or use my favorite easygen.
  • The decision is not that hard to made, as I believe what easygen can/have achieved is nearly impossible for XSLT to match up, although I'd be happy to see anyone to correct me on it.
  • The following is the journal of me using easygen to PK XSLT.
  • The reason and end goal of this process is blogged in "Settling the Key bindings war".

IntelliJ-Emacs Keymaps

The IntelliJ-Emacs Keymaps has two mappings:

whereas the later is the complementary to the former.

Since they are in the .jar and .xml form, their corresponding .json format is collect at the end of this wiki.

Goal

Convert the above two Keymaps to plain text.

Steps

Get the json definition file

  • Download from above sites and extract the .xml file from the .jar archive.
  • Converters to JSON using some online XML to JSON Converter like this one
  • Optionally sort the JSON alphabetically by some online tools like this one
  • Save them as /tmp/IntelliJ-Emacs.json and /tmp/Emacs+Patched.json.

Clean up

Clean up so that they can be consumed by easygen.

  • sed -ir 's/@(.)/\U\1\E/g; s/"action"/"Action"/; s/keyboard-shortcut/Shortcut/; s/-keystroke/KS/;' /tmp/IntelliJ-Emacs.json
  • sed -ir 's/@(.)/\U\1\E/g; s/"action"/"Action"/; s/keyboard-shortcut/Shortcut/; s/-keystroke/KS/;' /tmp/Emacs+Patched.json

Convert to plain text

  • Convert the json to plain text using easygen.
  • Translate from the IntelliJ Emacs Keymap naming convention to Emacs'.
  • Remove C-g from the list.

All above are done in:

  • easygen test/IntelliJ-Emacs.tmpl /tmp/IntelliJ-Emacs.json | sed -r 's/ [A-Z]\b/\L&\E/g; s/(LEFT|RIGHT|UP|DOWN|END|PAGE|INSERT|DELETE|ESCAPE|SPACE)/\L&\E/g; s/^(page)_/\1/; s/control /C-/g; s/(meta|alt) /M-/gi; s/shift /S-/gi; s/^S-C-M-/C-M-S-/; s/^S-C-/C-S-/; s/^S-M-/M-S-/; s/ENTER/RET/; s/PERIOD/./; s/SEMICOLON/;/; s|SLASH|/|; s/BACK_space/backspace/; /^C-g\t/d;' | tee /tmp/IntelliJ-Emacs.lst
  • easygen test/IntelliJ-Emacs.tmpl /tmp/Emacs+Patched.json | sed -r 's/ [A-Z]\b/\L&\E/g; s/(LEFT|RIGHT|UP|DOWN|END|PAGE|INSERT|DELETE|ESCAPE|SPACE)/\L&\E/g; s/^(page)_/\1/; s/control /C-/g; s/(meta|alt) /M-/gi; s/shift /S-/gi; s/^S-C-M-/C-M-S-/; s/^S-C-/C-S-/; s/^S-M-/M-S-/; s/ENTER/RET/; s/PERIOD/./; s/SEMICOLON/;/; s|SLASH|/|; s/BACK_space/backspace/; /^C-g\t/d;' | tee -a /tmp/IntelliJ-Emacs.lst

Note the second time it is tee -a, append.

Explantion

The content of test/IntelliJ-Emacs.tmpl is:

{{range .Action -}}
{{if eq "map[string]interface {}" (printf "%T" .Shortcut) }}{{.Shortcut.FirstKS}}{{if .Shortcut.SecondKS}} {{.Shortcut.SecondKS}}{{end}}	{{.Id}}
{{else}}{{ $Id := .Id -}}
{{range .Shortcut}}{{.FirstKS}}{{if .SecondKS}} {{.SecondKS}}{{end}}	{{$Id}}
{{end}}{{end}}{{end}}
Notes:
  • Take a look at the Awesome Emacs Keymap template notes first if you haven't yet.
  • Unlike Awesome Emacs Keymap definition, which separates the cases of single key map and multiple key maps with different keys, IntelliJ uses the same key for both cases. In above template, checking for single key map is done by {{if eq "map[string]interface {}" (printf "%T" .Shortcut) }}.
  • It was so difficult to get it right in one shot, that I wrote a test program to test the templating out before putting it into the easygen template file. This test program is the full blown program that starts from reading json, which can surely help if you need to troubleshoot your json reading & interpreting issues.

Putting it all together

To collect them into a single place and put them side by side, in Markdown table form:

  • LANG=C sort < /tmp/mcx.lst > /tmp/mcx.txt
  • LANG=C sort < /tmp/IntelliJ-Emacs.lst > /tmp/IntelliJ-Emacs.txt
  • join -j 1 -t "$t" -a 1 -a 2 -e'-' -o '0,1.2,2.2' /tmp/mcx.txt /tmp/IntelliJ-Emacs.txt | sed 's/\t/|/g; s/^/|/; s/$/|/;'

Final Result

Final Result of the IntelliJ-Emacs Keymap keybindings in plain text
C-/	$Undo
C-CLOSE_BRACKET	EditorCodeBlockEnd
C-F10	ToggleBookmark
C-F4	CloseContent
C-HOME	EditorTextStart
C-M-/	SmartTypeCompletion
C-M-;	Emacs+.CommentDwim
C-M-CLOSE_BRACKET	EditorCodeBlockEnd
C-M-F7	ShowUsages
C-M-OPEN_BRACKET	EditorCodeBlockStart
C-M-S-5	Emacs+.QueryReplaceRegexp
C-M-S-down	VcsShowNextChangeMarker
C-M-S-up	VcsShowPrevChangeMarker
C-M-a	MethodUp
C-M-b	EditorPreviousWord
C-M-backspace	Emacs+.KillWordBackward
C-M-d	EditorCodeBlockEnd
C-M-delete	Emacs+.KillWordBackward
C-M-e	MethodDown
C-M-f	EditorNextWord
C-M-g	GotoDeclaration
C-M-i	AutoIndentLines
C-M-j	Emacs+.CommentIndentNew
C-M-k	EditorKillToWordEnd
C-M-k	Emacs+.KillWord
C-M-q	AutoIndentLines
C-M-r	Emacs+.ISearchBackwardRegexp
C-M-s	Emacs+.ISearchForwardRegexp
C-M-s	Find
C-M-u	EditorCodeBlockStart
C-M-w	EditorSelectWord
C-M-w	Emacs+.AppendNextKill
C-M-w	Emacs+.ISDeleteChar
C-M-y	Emacs+.ISYankChar
C-OPEN_BRACKET	EditorCodeBlockStart
C-S-2	EditorToggleStickySelection
C-S-M-d	EditorCodeBlockEndWithSelection
C-S-M-u	EditorCodeBlockStartWithSelection
C-S-MINUS	$Undo
C-S-backspace	Emacs+.KillWholeLine
C-S-down	EditorForwardParagraphWithSelection
C-S-space	SmartTypeCompletion
C-S-up	EditorBackwardParagraphWithSelection
C-S-x BACK_QUOTE	GotoPreviousError
C-S-z	$Redo
C-a	EditorLineStart
C-b	EditorLeft
C-backspace	EditorDeleteToWordStart
C-backspace	Emacs+.KillWordBackward
C-c C-c	CommentByLineComment
C-c C-e	Diff.KeymapGroup
C-c C-n	StepOver
C-c C-p	EvaluateExpression
C-c C-r	Resume
C-c C-s	StepInto
C-c C-t	ToggleTemporaryLineBreakpoint
C-c C-u	RunToCursor
C-d	$Delete
C-d	Emacs+.ISForwardDelete
C-delete	Emacs+.KillWord
C-down	EditorForwardParagraph
C-e	EditorLineEnd
C-end	EditorTextEnd
C-f	EditorRight
C-insert	$Copy
C-k	EditorCutLineEnd
C-k	Emacs+.KillLine
C-l	EditorScrollToCenter
C-l	Emacs+.Recenter
C-left	EditorPreviousWord
C-left	Emacs+.BackwardWord
C-m	Console.Execute
C-m	EditorChooseLookupItem
C-m	EditorEnter
C-m	EditorStartNewLine
C-m	NextTemplateVariable
C-n	EditorDown
C-n	Emacs+.TWSelectNext
C-o	EditorSplitLine
C-p	EditorUp
C-p	Emacs+.TWSelectPrevious
C-r	Emacs+.ISearchBackward
C-r	FindPrevious
C-right	EditorNextWord
C-right	Emacs+.ForwardWord
C-s	Emacs+.ISearchForward
C-s	Find
C-space	EditorToggleStickySelection
C-t	Emacs+.TransposeChars
C-u C-M-;	Emacs+.CommentKill
C-u M-.	GotoImplementation
C-u M-;	Emacs+.CommentKill
C-u M-CIRCUMFLEX	EditorJoinLines
C-u M-S-6	EditorJoinLines
C-up	EditorBackwardParagraph
C-v	EditorPageDown
C-v	Emacs+.TWScrollUp
C-w	EditorKillRegion
C-w	Emacs+.ISYankNextWord
C-w	Emacs+.KillRegion
C-x 0	CloseContent
C-x 0	HideActiveWindow
C-x 1	Emacs+.DeleteOtherWindows
C-x 1	MaximizeToolWindow
C-x 1	UnsplitAll
C-x 2	SplitHorizontally
C-x 3	SplitVertically
C-x BACK_QUOTE	GotoNextError
C-x BACK_QUOTE	GotoNextError
C-x C-c	CloseAllEditors
C-x C-f	GotoFile
C-x C-o	Emacs+.DeleteBlankLines
C-x C-o	NextProjectWindow
C-x C-p	FileChooser.TogglePathShowing
C-x C-s	SaveAll
C-x C-t	Emacs+.TransposeLines
C-x C-v	ReloadFromDisk
C-x C-x	Emacs+.ExchangePointAndMark
C-x EQUALS	Emacs+.WhatCursorPos
C-x b	Emacs+.SwitchToBuffer
C-x b	Switcher
C-x h	$SelectAll
C-x k	CloseContent
C-x n	Diff.NextChange
C-x n	NextTab
C-x o	Emacs+.TWInterrupt
C-x o	NextSplitter
C-x p	Diff.PrevChange
C-x p	PreviousTab
C-x space	ToggleLineBreakpoint
C-x v	Vcs.QuickListPopupAction
C-x x	EditorSwapSelectionBoundaries
C-y	$Paste
C-y	Emacs+.ISYankLine
C-y	Emacs+.Yank
C-z	EditorPageUp
F2	GotoNextError
F2	GotoNextError
F3	FindNext
HOME	EditorLineStart
M-.	GotoDeclaration
M-.	GotoDeclaration
M-/	CodeCompletion
M-;	CommentByLineComment
M-;	Emacs+.CommentDwim
M-AT	EditorSelectWord
M-BACK_/	Emacs+.DeleteHorizSpace
M-CIRCUMFLEX	Emacs+.DeleteIndentation
M-F3	Find
M-F7	FindUsages
M-F7	FindUsages
M-GREATER	EditorTextEnd
M-GREATER	Emacs+.TWEnd
M-LESS	EditorTextStart
M-LESS	Emacs+.TWBegin
M-MINUS C-k	EditorCutLineBackward
M-MINUS C-k	Emacs+.CutLineBackwardKey
M-S-.	EditorTextEnd
M-S-.	EditorTextEnd
M-S-.	Emacs+.TWEnd
M-S-2	EditorSelectWord
M-S-5	Emacs+.QueryReplace
M-S-5	Replace
M-S-6	Emacs+.DeleteIndentation
M-S-COMMA	EditorTextStart
M-S-COMMA	EditorTextStart
M-S-COMMA	Emacs+.TWBegin
M-S-MINUS	$Redo
M-S-g	GotoClass
M-S-left	PreviousEditorTab
M-S-m	CompileProject
M-S-o	SelectVirtualTemplateElement
M-S-p	ParameterInfo
M-S-right	NextEditorTab
M-S-s	FindUsages
M-S-s	ShowUsages
M-b	EditorPreviousWord
M-b	Emacs+.BackwardWord
M-backspace	EditorDeleteToWordStart
M-c	$Copy
M-c	Emacs+.CapitalizeWord
M-c	Emacs+.ISCase
M-d	EditorDuplicate
M-d	EditorKillToWordEnd
M-d	EditorKillToWordEnd
M-d	Emacs+.KillWord
M-delete	EditorKillToWordStart
M-delete	Emacs+.KillWordBackward
M-down	MethodDown
M-f	EditorNextWord
M-f	Emacs+.ForwardWord
M-g	GotoLine
M-g M-g	GotoLine
M-g M-n	GotoNextError
M-g g	GotoLine
M-g n	GotoNextError
M-i	EmacsStyleIndent
M-j	Emacs+.CommentIndentNew
M-l	Emacs+.DowncaseWord
M-left	Diff.PrevChange
M-left	Emacs+.BackwardWord
M-left	PreviousTab
M-m	EditorLineStart
M-m	Emacs+.BackToIndentation
M-m	Emacs+.ISMultiLine
M-n	Emacs+.CommentNextLine
M-n	Emacs+.ISearchHistoryNext
M-p	Emacs+.CommentPreviousLine
M-p	Emacs+.ISearchHistoryPrevious
M-r	Emacs+.ISRegex
M-r	FindPrevious
M-right	Diff.NextChange
M-right	Emacs+.ForwardWord
M-right	NextTab
M-s	FindInPath
M-s	FindNext
M-space	Emacs+.JustOneSpace
M-t	Emacs+.TransposeWords
M-u	Emacs+.UpcaseWord
M-u	SynchronizeCurrentFile
M-up	MethodUp
M-v	EditorPageUp
M-v	Emacs+.TWScrollDown
M-w	EditorKillRingSave
M-w	Emacs+.ISWords
M-w	Emacs+.SaveRegion
M-x	GotoAction
M-x	GotoAction
M-y	Emacs+.ISYankLast
M-y	Emacs+.YankPop
M-y	PasteMultiple
RET	Console.Execute
RET	EditorChooseLookupItem
RET	EditorEnter
RET	Emacs+.ISEnter
RET	NextTemplateVariable
S-F2	GotoPreviousError
S-F3	FindPrevious
S-delete	$Cut
S-insert	$Paste
TAB	EmacsStyleIndent
TAB	EmacsStyleIndent
TAB	NextTemplateVariable
delete	$Delete
down	EditorDown
end	EditorLineEnd
escape .	GotoDeclaration
escape .	GotoDeclaration
escape ;	Emacs+.CommentDwim
escape BACK_/	Emacs+.DeleteHorizSpace
escape C-b	EditorPreviousWord
escape C-backspace	Emacs+.KillWordBackward
escape C-delete	Emacs+.KillWordBackward
escape C-f	EditorNextWord
escape C-j	Emacs+.CommentIndentNew
escape COMMA	EditorTextStart
escape b	Emacs+.BackwardWord
escape backspace	EditorDeleteToWordStart
escape c	Emacs+.CapitalizeWord
escape d	EditorKillToWordEnd
escape d	Emacs+.KillWord
escape delete	Emacs+.KillWordBackward
escape escape	EditorEscape
escape escape	EditorEscape
escape f	Emacs+.ForwardWord
escape j	Emacs+.CommentIndentNew
escape l	Emacs+.DowncaseWord
escape left	Emacs+.BackwardWord
escape m	Emacs+.BackToIndentation
escape n	Emacs+.CommentNextLine
escape p	Emacs+.CommentPreviousLine
escape right	Emacs+.ForwardWord
escape space	Emacs+.JustOneSpace
escape u	Emacs+.UpcaseWord
escape u	SynchronizeCurrentFile
escape w	$Copy
escape w	Emacs+.SaveRegion
escape x	GotoAction
escape y	Emacs+.YankPop
left	EditorLeft
pagedown	EditorPageDown
pageup	EditorPageUp
right	EditorRight
up	EditorUp
Json data of the Awesome Emacs Keymap keybindings
{
  "Keybindings": [
   
    {
      "Key": "ctrl+u",
      "Command": "universalArgument",
      "when": "editorTextFocus"
    },
    {
      "$special": "universalArgumentTypes"
    },
   
    {
      "Keys": ["right", "ctrl+f"],
      "Command": "forwardChar",
      "whens": ["editorTextFocus", "terminalFocus"] 
    },
    {
      "Keys": ["right", "ctrl+f"],
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "forwardChar"
      }
    },
   
    {
      "Keys": ["left", "ctrl+b"],
      "Command": "backwardChar",
      "whens": ["editorTextFocus", "terminalFocus"]
    },
    {
      "Keys": ["left", "ctrl+b"],
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "backwardChar"
      }
    },
   
    {
      "Keys": ["up", "ctrl+p"],
      "Command": "previousLine",
      "whens": ["editorTextFocus && !suggestWidgetVisible", "terminalFocus"]
    },
    {
      "Keys": ["up", "ctrl+p"],
      "Command": "selectPrevSuggestion",
      "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
    },
    {
      "Keys": ["up", "ctrl+p"],
      "Command": "showPrevParameterHint",
      "when": "parameterHintsMultipleSignatures && parameterHintsVisible && textInputFocus"
    },
    {
      "Keys": ["up", "ctrl+p"],
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "previousLine"
      }
    },
   
    {
      "Keys": ["down", "ctrl+n"],
      "Command": "nextLine",
      "whens": ["editorTextFocus", "terminalFocus"]
    },
    {
      "Keys": ["down", "ctrl+n"],
      "Command": "selectNextSuggestion",
      "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
    },
    {
      "Keys": ["down", "ctrl+n"],
      "Command": "showNextParameterHint",
      "when": "parameterHintsMultipleSignatures && parameterHintsVisible && textInputFocus"
    },
    {
      "Keys": ["down", "ctrl+n"],
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "nextLine"
      }
    },
   
    {
      "Keys": ["home", "ctrl+a"],
      "Command": "moveBeginningOfLine",
      "whens": ["editorTextFocus", "terminalFocus"]
    },
    {
      "Keys": ["home", "ctrl+a"],
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "moveBeginningOfLine"
      }
    },
   
    {
      "Keys": ["end", "ctrl+e"],
      "Command": "moveEndOfLine",
      "whens": ["editorTextFocus", "terminalFocus"]
    },
    {
      "Keys": ["end", "ctrl+e"],
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "moveEndOfLine"
      }
    },
   
    {
      "Key": "meta+f",
      "Command": "forwardWord",
      "when": "editorTextFocus"
    },
    {
      "Key": "meta+f",
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "forwardWord"
      }
    },
   
    {
      "Key": "meta+b",
      "Command": "backwardWord",
      "when": "editorTextFocus"
    },
    {
      "Key": "meta+b",
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing",
      "args": {
        "then": "backwardWord"
      }
    },
   
    {
      "Key": "meta+m",
      "Command": "backToIndentation",
      "when": "editorTextFocus"
    },
    {
      "Key": "meta+m",
      "Command": "isearchExit",
      "when": "!config.cursorMoveOnFindWidget && editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "backToIndentation"
      }
    },
   
    {
      "Keys": ["pagedown", "ctrl+v"],
      "Command": "scrollUpCommand",
      "when": "editorTextFocus && !suggestWidgetVisible"
    },
    {
      "Keys": ["pagedown", "ctrl+v"],
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "scrollUpCommand"
      }
    },
   
    {
      "Keys": ["pageup", "meta+v"],
      "Command": "scrollDownCommand",
      "when": "editorTextFocus && !suggestWidgetVisible"
    },
    {
      "Keys": ["pageup", "meta+v"],
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "scrollDownCommand"
      }
    },
   
    {
      "Key": "meta+shift+[",
      "Command": "backwardParagraph",
      "when": "editorTextFocus && !suggestWidgetVisible"
    },
   
    {
      "Key": "meta+shift+]",
      "Command": "forwardParagraph",
      "when": "editorTextFocus && !suggestWidgetVisible"
    },
   
    {
      "Key": "meta+shift+.",
      "Command": "endOfBuffer",
      "when": "editorTextFocus"
    },
    {
      "Key": "meta+shift+.",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then":"endOfBuffer"
      }
    },
   
    {
      "Key": "meta+shift+,",
      "Command": "beginningOfBuffer",
      "when": "editorTextFocus"
    },
    {
      "Key": "meta+shift+,",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "beginningOfBuffer"
      }
    },
   
    {
      "Keys": ["meta+g meta+g", "meta+g g"],
      "Command": "workbench.action.gotoLine"
    },
    {
      "Keys": ["meta+g meta+g", "meta+g g"],
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "workbench.action.gotoLine"
      }
    },
    {
      "Key": "escape g",
      "Command": "workbench.action.gotoLine",
      "when": "config.useMetaPrefixEscape"
    },
   
    {
      "Keys": ["meta+g n", "meta+g meta+n"],
      "Command": "editor.action.marker.next"
    },
    {
      "Key": "ctrl+x `",
      "Command": "editor.action.marker.next",
      "when": "editorTextFocus"
    },
   
    {
      "Keys": ["meta+g p", "meta+g meta+p"],
      "Command": "editor.action.marker.prev"
    },
   
    {
      "Key": "ctrl+l",
      "Command": "recenterTopBottom",
      "when": "editorTextFocus"
    },
   
    {
      "Key": "ctrl+s",
      "Command": "isearchForward",
      "when": "!findInputFocussed"
    },
    {
      "Key": "ctrl+s",
      "Command": "editor.action.nextMatchFindAction",
      "when": "findInputFocussed"
    },
   
    {
      "Key": "ctrl+r",
      "Command": "isearchBackward",
      "when": "!findInputFocussed"
    },
    {
      "Key": "ctrl+r",
      "Command": "editor.action.previousMatchFindAction",
      "when": "findInputFocussed"
    },
   
    {
      "Key": "meta+shift+5",
      "Command": "editor.action.startFindReplaceAction",
      "when": "editorFocus"
    },
   
   
    {
      "Keys": [
        "ctrl+f",
        "ctrl+b",
        "ctrl+p",
        "ctrl+n",
        "ctrl+a",
        "ctrl+e",
        "alt+f",
        "alt+b",
        "alt+m",
        "ctrl+d",
        "ctrl+h",
        "alt+d",
        "ctrl+k",
        "ctrl+w",
        "alt+w",
        "ctrl+y",
        "alt+y",
        "ctrl+m",
        "ctrl+j",
        "alt+l",
        "alt+u",
        "alt+backspace"
      ],
      "whens": [
        "isWindows && config.cursorMoveOnFindWidget && findInputFocussed && !isComposing",
        "isWindows && replaceInputFocussed && !isComposing"
      ]
    },
   
    {
      "Key": "ctrl+meta+n",
      "Command": "addSelectionToNextFindMatch",
      "when": "editorFocus"
    },
    {
      "Key": "ctrl+meta+p",
      "Command": "addSelectionToPreviousFindMatch",
      "when": "editorFocus"
    },
   
   
   
    {
      "Key": "ctrl+d",
      "Command": "deleteForwardChar",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+h",
      "Command": "deleteBackwardChar",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+d",
      "Command": "killWord",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+backspace",
      "Command": "backwardKillWord",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+k",
      "Command": "killLine",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+shift+backspace",
      "Command": "killWholeLine",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+w",
      "Command": "killRegion",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+w",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key": "meta+w",
      "Command": "copyRegion",
      "when": "editorTextFocus"
    },
    {
     
      "Key": "meta+w",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key": "ctrl+y",
      "Command": "yank",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+y",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key": "meta+y",
      "Command": "yank-pop",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+y",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },{
      "Key": "ctrl+o",
      "Command": "lineBreakInsert",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+o",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key": "ctrl+m",
      "Command": "newLine",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+m",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key": "ctrl+j",
      "Command": "newLine",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+j",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key": "ctrl+x ctrl+o",
      "Command": "deleteBlankLines",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+x ctrl+o",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "deleteBlankLines"
      }
    },
    {
      "Key": "ctrl+x h",
      "Command": "editor.action.selectAll",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+x h",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then":"editor.action.selectAll"
      }
    },
    {
      "Keys": ["ctrl+x u", "ctrl+/", "ctrl+shift+-"],
      "Command": "undo",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Keys": ["ctrl+x u", "ctrl+/", "ctrl+shift+-"],
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "undo"
      }
    },
    {
      "Key": "ctrl+;",
      "Command": "editor.action.commentLine",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+;",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "editor.action.commentLine"
      }
    },
    {
      "Key": "meta+;",
      "Command": "editor.action.blockComment",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+;",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !isComposing",
      "args": {
        "then": "editor.action.blockComment"
      }
    },
    {
      "Key": "ctrl+x ctrl+l",
      "Command": "transformToLowercase",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+l",
      "Command": "transformToLowercase",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "ctrl+x ctrl+u",
      "Command": "transformToUppercase",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+u",
      "Command": "transformToUppercase",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+c",
      "Command": "transformToTitlecase",
      "when": "editorTextFocus && !editorReadonly"
    },
    {
      "Key": "meta+shift+6",
      "Command": "executeCommands",
      "when": "editorTextFocus && !editorReadOnly",
      "args": [
        "previousLine",
        "editor.action.joinLines"
      ]
    },
   
    {
      "Key": "escape",
      "Command": "cancel",
      "when": "editorTextFocus && editorHasSelection && !config.useMetaPrefixEscape"
    },
    {
      "Key": "escape",
      "Command": "cancel",
      "when": "editorTextFocus && editorHasMultipleSelections && !config.useMetaPrefixEscape"
    },
    {
      "Key": "ctrl+g",
      "Command": "cancel",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+g",
      "Command": "isearchAbort",
      "when": "editorFocus && findWidgetVisible && !isComposing"
    },
    {
      "Key":  "enter",
      "Command": "isearchExit",
      "when": "editorFocus && findWidgetVisible && !replaceInputFocussed && !isComposing"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeReferenceSearchEditor",
      "when": "inReferenceSearchEditor && !config.editor.stablePeek"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeReferenceSearch",
      "when": "referenceSearchVisible && !config.editor.stablePeek"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeBreakpointWidget",
      "when": "breakpointWidgetVisible && editorFocus"
    },
    {
      "Key": "ctrl+g",
      "Command": "leaveSnippet",
      "when": "editorTextFocus && inSnippetMode"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeMarkersNavigation",
      "when": "editorFocus && markersNavigationVisible"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeParameterHints",
      "when": "editorTextFocus && parameterHintsVisible"
    },
    {
      "Key": "ctrl+g",
      "Command": "hideSuggestWidget",
      "when": "editorTextFocus && suggestWidgetVisible"
    },
    {
      "Key": "ctrl+g",
      "Command": "cancelRenameInput",
      "when": "editorFocus && renameInputVisible"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeAccessibilityHelp",
      "when": "accessibilityHelpWidgetVisible && editorFocus"
    },
    {
      "Key": "ctrl+g",
      "Command": "closeReplaceInFilesWidget",
      "when": "replaceInputBoxFocus && searchViewletVisible"
    },
    {
      "Key": "ctrl+g",
      "Command": "workbench.action.closeMessages",
      "when": "globalMessageVisible"
    },
    {
      "Key": "ctrl+g",
      "Command": "workbench.action.closeQuickOpen",
      "when": "inQuickOpen"
    },
   
    {
      "Keys": ["ctrl+space", "ctrl+shift+2"],
      "Command": "setMarkCommand",
      "when": "editorTextFocus"
    },
    {
      "Key": "escape space",
      "Command": "setMarkCommand",
      "when": "editorTextFocus && config.useMetaPrefixEscape"
    },
    {
      "Key": "ctrl+x ctrl+x",
      "Command": "exchangePointAndMark",
      "when": "editorTextFocus"
    },
   
    {
      "Key": "ctrl+x space",
      "Command": "rectangleMarkMode",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+x r",
      "Command": "startRectCommand",
      "when": "editorTextFocus"
    },
    {
      "Key": "k", 
      "Command": "killRectangle",
      "when": "acceptingRectCommand && editorTextFocus"
    },
    {
      "Key": "y", 
      "Command": "yankRectangle",
      "when": "acceptingRectCommand && editorTextFocus"
    },
    {
      "Key": "d", 
      "Command": "deleteRectangle",
      "when": "acceptingRectCommand && editorTextFocus"
    },
    {
      "Key": "meta+w", 
      "Command": "copyRectangleAsKill",
      "when": "acceptingRectCommand && editorTextFocus"
    },
    {
      "Key": "o", 
      "Command": "openRectangle",
      "when": "acceptingRectCommand && editorTextFocus"
    },
    {
      "Key": "c", 
      "Command": "clearRectangle",
      "when": "acceptingRectCommand && editorTextFocus"
    },
    {
      "$special": "rectMarkModeTypes"
    },
   
    {
      "Key": "ctrl+'",
      "Command": "editor.action.triggerSuggest",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+'",
      "Command": "toggleSuggestionDetails",
      "when": "editorTextFocus && suggestWidgetVisible"
    },
    {
      "Key": "meta+/",
      "Command": "editor.action.triggerSuggest",
      "when": "editorTextFocus"
    },
    {
      "Key": "meta+/",
      "Command": "toggleSuggestionDetails",
      "when": "editorTextFocus && suggestWidgetVisible"
    },
   
    {
      "Key": "meta+x",
      "Command": "workbench.action.showCommands"
    },
   
    {
      "Key": "ctrl+meta+space",
      "Command": "workbench.action.toggleSidebarVisibility"
    },
   
    {
      "Key": "ctrl+x ctrl+c",
      "Command": "workbench.action.closeWindow"
    },
    {
      "Key": "ctrl+x z",
      "Command": "workbench.action.toggleZenMode",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x ctrl+f",
      "Command": "workbench.action.quickOpen",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x ctrl+s",
      "Command": "workbench.action.files.save",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x ctrl+w",
      "Command": "workbench.action.files.saveAs",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x s",
      "Command": "workbench.action.files.saveAll",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x ctrl+n",
      "Command": "workbench.action.newWindow",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x b",
      "Command": "workbench.action.showAllEditorsByMostRecentlyUsed",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x k",
      "Command": "workbench.action.closeActiveEditor",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x ctrl-k",
      "Command": "workbench.action.closeAllEditors",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x 0",
      "Command": "workbench.action.closeEditorsInGroup",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x 1",
      "Command": "workbench.action.closeEditorsInOtherGroups",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x 2",
      "Command": "workbench.action.splitEditorDown",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x 3",
      "Command": "workbench.action.splitEditorRight",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x 4",
      "Command": "workbench.action.toggleEditorGroupLayout",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+x o",
      "Command": "workbench.action.navigateEditorGroups",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+meta+f",
      "Command": "paredit.forwardSexp",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+meta+b",
      "Command": "paredit.backwardSexp",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+meta+k",
      "Command": "paredit.killSexp",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+p",
      "Command": "selectPrevQuickFix",
      "when": "editorFocus && quickFixWidgetVisible"
    },
    {
      "Key": "ctrl+n",
      "Command": "selectNextQuickFix",
      "when": "editorFocus && quickFixWidgetVisible"
    },
    {
      "Key": "ctrl+p",
      "Command": "workbench.action.quickOpenSelectPrevious",
      "when": "inQuickOpen"
    },
    {
      "Key": "ctrl+n",
      "Command": "workbench.action.quickOpenSelectNext",
      "when": "inQuickOpen"
    },
    {
      "Key": "ctrl+m",
      "Command": "workbench.action.acceptSelectedQuickOpenItem",
      "when": "inQuickOpen"
    },
    {
      "Key": "ctrl+shift+'",
      "Command": "editor.action.triggerParameterHints",
      "when": "editorTextFocus"
    },
    {
      "Key": "ctrl+x j",
      "Command": "workbench.action.togglePanel",
      "when": "!terminalFocus"
    },
    {
      "Key": "ctrl+i",
      "Command": "executeCommands",
      "args": [
        "forwardChar",
        "nextLine"
      ]
    }
  ]
}
Json data of the IntelliJ-Emacs Keymap keybindings
{
   "Name": "Emacs+",
   "Parent": "Emacs",
   "Version": "1",
   "Disable-mnemonics": "true",
   "Action": [
      {
         "Id": "ToggleBookmark",
         "Shortcut": {
            "FirstKS": "control F10"
         }
      },
      {
         "Id": "EditorCodeBlockStart",
         "Shortcut": {
            "FirstKS": "control alt U"
         }
      },
      {
         "Id": "EditorCodeBlockEnd",
         "Shortcut": {
            "FirstKS": "control alt D"
         }
      },
      {
         "Id": "EditorCodeBlockStartWithSelection",
         "Shortcut": {
            "FirstKS": "control shift alt U"
         }
      },
      {
         "Id": "EditorCodeBlockEndWithSelection",
         "Shortcut": {
            "FirstKS": "control shift alt D"
         }
      },
      {
         "Id": "EditorSelectWord",
         "Shortcut": [
            {
               "FirstKS": "alt AT"
            },
            {
               "FirstKS": "alt shift 2"
            }
         ]
      },
      {
         "Id": "Vcs.QuickListPopupAction",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "V"
         }
      },
      {
         "Id": "Diff.KeymapGroup",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control E"
         }
      },
      {
         "Id": "GotoLine",
         "Shortcut": [
            {
               "FirstKS": "alt G",
               "SecondKS": "G"
            },
            {
               "FirstKS": "alt G",
               "SecondKS": "alt G"
            }
         ]
      },
      {
         "Id": "GotoNextError",
         "Shortcut": [
            {
               "FirstKS": "alt G",
               "SecondKS": "N"
            },
            {
               "FirstKS": "alt G",
               "SecondKS": "alt N"
            },
            {
               "FirstKS": "F2"
            },
            {
               "FirstKS": "control X",
               "SecondKS": "BACK_QUOTE"
            }
         ]
      },
      {
         "Id": "GotoDeclaration",
         "Shortcut": [
            {
               "FirstKS": "alt PERIOD"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "PERIOD"
            }
         ],
         "mouse-shortcut": {
            "Keystroke": "control button1"
         }
      },
      {
         "Id": "GotoImplementation",
         "Shortcut": {
            "FirstKS": "control U",
            "SecondKS": "alt PERIOD"
         }
      },
      {
         "Id": "GotoAction",
         "Shortcut": {
            "FirstKS": "alt X"
         }
      },
      {
         "Id": "FindInPath",
         "Shortcut": {
            "FirstKS": "alt S"
         }
      },
      {
         "Id": "FindUsages",
         "Shortcut": {
            "FirstKS": "alt F7"
         }
      },
      {
         "Id": "ShowUsages",
         "Shortcut": [
            {
               "FirstKS": "control alt F7"
            },
            {
               "FirstKS": "alt shift S"
            }
         ]
      },
      {
         "Id": "EditorTextStart",
         "Shortcut": [
            {
               "FirstKS": "alt shift COMMA"
            },
            {
               "FirstKS": "alt LESS"
            }
         ]
      },
      {
         "Id": "EditorTextEnd",
         "Shortcut": [
            {
               "FirstKS": "alt shift PERIOD"
            },
            {
               "FirstKS": "alt GREATER"
            }
         ]
      },
      {
         "Id": "Emacs+.ForwardWord",
         "Shortcut": [
            {
               "FirstKS": "control RIGHT"
            },
            {
               "FirstKS": "alt RIGHT"
            },
            {
               "FirstKS": "alt F"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "F"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "RIGHT"
            }
         ]
      },
      {
         "Id": "Emacs+.BackwardWord",
         "Shortcut": [
            {
               "FirstKS": "control LEFT"
            },
            {
               "FirstKS": "alt LEFT"
            },
            {
               "FirstKS": "alt B"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "B"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "LEFT"
            }
         ]
      },
      {
         "Id": "EditorNextWord",
         "Shortcut": {
            "FirstKS": "control alt F"
         }
      },
      {
         "Id": "EditorPreviousWord",
         "Shortcut": {
            "FirstKS": "control alt B"
         }
      },
      {
         "Id": "EditorKillToWordEnd",
         "Shortcut": [
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "D"
            },
            {
               "FirstKS": "alt D"
            },
            {
               "FirstKS": "control alt K"
            }
         ]
      },
      {
         "Id": "MaximizeToolWindow",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "1"
         }
      },
      {
         "Id": "HideActiveWindow",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "0"
         }
      },
      {
         "Id": "EditorEscape",
         "Shortcut": {
            "FirstKS": "ESCAPE",
            "SecondKS": "ESCAPE"
         }
      },
      {
         "Id": "Emacs+.KeyboardQuit",
         "Shortcut": {
            "FirstKS": "control G"
         }
      },
      {
         "Id": "EditorJoinLines",
         "Shortcut": [
            {
               "FirstKS": "control U",
               "SecondKS": "alt shift 6"
            },
            {
               "FirstKS": "control U",
               "SecondKS": "alt CIRCUMFLEX"
            }
         ]
      },
      {
         "Id": "CommentByLineComment",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control C"
         }
      },
      {
         "Id": "EditorStartNewLine",
         "Shortcut": {
            "FirstKS": "control M"
         }
      },
      {
         "Id": "ReloadFromDisk",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "control V"
         }
      },
      {
         "Id": "EmacsStyleIndent",
         "Shortcut": [
            {
               "FirstKS": "TAB"
            },
            {
               "FirstKS": "alt I"
            }
         ]
      },
      {
         "Id": "ToggleLineBreakpoint",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "SPACE"
         }
      },
      {
         "Id": "StepOver",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control N"
         }
      },
      {
         "Id": "StepInto",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control S"
         }
      },
      {
         "Id": "Resume",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control R"
         }
      },
      {
         "Id": "RunToCursor",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control U"
         }
      },
      {
         "Id": "ToggleTemporaryLineBreakpoint",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control T"
         }
      },
      {
         "Id": "EvaluateExpression",
         "Shortcut": {
            "FirstKS": "control C",
            "SecondKS": "control P"
         }
      },
      {
         "Id": "Emacs+.WhatCursorPos",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "EQUALS"
         }
      },
      {
         "Id": "Emacs+.BackToIndentation",
         "Shortcut": [
            {
               "FirstKS": "alt M"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "M"
            }
         ]
      },
      {
         "Id": "Emacs+.Recenter",
         "Shortcut": {
            "FirstKS": "control L"
         }
      },
      {
         "Id": "Emacs+.ExchangePointAndMark",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "control X"
         }
      },
      {
         "Id": "Emacs+.DeleteOtherWindows",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "1"
         }
      },
      {
         "Id": "Emacs+.CommentDwim",
         "Shortcut": [
            {
               "FirstKS": "alt SEMICOLON"
            },
            {
               "FirstKS": "control alt SEMICOLON"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "SEMICOLON"
            }
         ]
      },
      {
         "Id": "Emacs+.CommentKill",
         "Shortcut": [
            {
               "FirstKS": "control U",
               "SecondKS": "alt SEMICOLON"
            },
            {
               "FirstKS": "control U",
               "SecondKS": "control alt SEMICOLON"
            }
         ]
      },
      {
         "Id": "Emacs+.CommentNextLine",
         "Shortcut": [
            {
               "FirstKS": "alt N"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "N"
            }
         ]
      },
      {
         "Id": "Emacs+.CommentPreviousLine",
         "Shortcut": [
            {
               "FirstKS": "alt P"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "P"
            }
         ]
      },
      {
         "Id": "Emacs+.CommentIndentNew",
         "Shortcut": [
            {
               "FirstKS": "control alt J"
            },
            {
               "FirstKS": "alt J"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "J"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "control J"
            }
         ]
      },
      {
         "Id": "Emacs+.TransposeChars",
         "Shortcut": {
            "FirstKS": "control T"
         }
      },
      {
         "Id": "Emacs+.TransposeWords",
         "Shortcut": {
            "FirstKS": "alt T"
         }
      },
      {
         "Id": "Emacs+.TransposeLines",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "control T"
         }
      },
      {
         "Id": "Emacs+.DeleteIndentation",
         "Shortcut": [
            {
               "FirstKS": "alt shift 6"
            },
            {
               "FirstKS": "alt CIRCUMFLEX"
            }
         ]
      },
      {
         "Id": "Emacs+.JustOneSpace",
         "Shortcut": [
            {
               "FirstKS": "alt SPACE"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "SPACE"
            }
         ]
      },
      {
         "Id": "Emacs+.DeleteHorizSpace",
         "Shortcut": [
            {
               "FirstKS": "alt BACK_SLASH"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "BACK_SLASH"
            }
         ]
      },
      {
         "Id": "Emacs+.DeleteBlankLines",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "control O"
         },
         "#text": "/>"
      },
      {
         "Id": "Emacs+.Yank",
         "Shortcut": {
            "FirstKS": "control Y"
         }
      },
      {
         "Id": "Emacs+.YankPop",
         "Shortcut": [
            {
               "FirstKS": "alt Y"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "Y"
            }
         ]
      },
      {
         "Id": "Emacs+.CapitalizeWord",
         "Shortcut": [
            {
               "FirstKS": "alt C"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "C"
            }
         ]
      },
      {
         "Id": "Emacs+.DowncaseWord",
         "Shortcut": [
            {
               "FirstKS": "alt L"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "L"
            }
         ]
      },
      {
         "Id": "Emacs+.UpcaseWord",
         "Shortcut": [
            {
               "FirstKS": "alt U"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "U"
            }
         ]
      },
      {
         "Id": "Emacs+.KillWord",
         "Shortcut": [
            {
               "FirstKS": "alt D"
            },
            {
               "FirstKS": "control DELETE"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "D"
            },
            {
               "FirstKS": "control alt K"
            }
         ]
      },
      {
         "Id": "Emacs+.KillWordBackward",
         "Shortcut": [
            {
               "FirstKS": "alt DELETE"
            },
            {
               "FirstKS": "control BACK_SPACE"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "DELETE"
            },
            {
               "FirstKS": "control alt DELETE"
            },
            {
               "FirstKS": "control alt BACK_SPACE"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "control DELETE"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "control BACK_SPACE"
            }
         ]
      },
      {
         "Id": "Emacs+.KillLine",
         "Shortcut": {
            "FirstKS": "control K"
         }
      },
      {
         "Id": "Emacs+.KillWholeLine",
         "Shortcut": {
            "FirstKS": "control shift BACK_SPACE"
         }
      },
      {
         "Id": "Emacs+.CutLineBackwardKey",
         "Shortcut": {
            "FirstKS": "alt MINUS",
            "SecondKS": "control K"
         }
      },
      {
         "Id": "Emacs+.KillRegion",
         "Shortcut": {
            "FirstKS": "control W"
         }
      },
      {
         "Id": "Emacs+.SaveRegion",
         "Shortcut": [
            {
               "FirstKS": "alt W"
            },
            {
               "FirstKS": "ESCAPE",
               "SecondKS": "W"
            }
         ]
      },
      {
         "Id": "Emacs+.AppendNextKill",
         "Shortcut": {
            "FirstKS": "control alt W"
         }
      },
      {
         "Id": "Emacs+.ISearchForward",
         "Shortcut": {
            "FirstKS": "control S"
         }
      },
      {
         "Id": "Emacs+.ISearchForwardRegexp",
         "Shortcut": {
            "FirstKS": "control alt S"
         }
      },
      {
         "Id": "Emacs+.ISearchBackward",
         "Shortcut": {
            "FirstKS": "control R"
         }
      },
      {
         "Id": "Emacs+.ISearchBackwardRegexp",
         "Shortcut": {
            "FirstKS": "control alt R"
         }
      },
      {
         "Id": "Emacs+.QueryReplace",
         "Shortcut": {
            "FirstKS": "shift alt 5"
         }
      },
      {
         "Id": "Emacs+.QueryReplaceRegexp",
         "Shortcut": {
            "FirstKS": "shift control alt 5"
         }
      },
      {
         "Id": "Emacs+.ISYankNextWord",
         "Shortcut": {
            "FirstKS": "control W"
         }
      },
      {
         "Id": "Emacs+.ISYankLine",
         "Shortcut": {
            "FirstKS": "control Y"
         }
      },
      {
         "Id": "Emacs+.ISYankLast",
         "Shortcut": {
            "FirstKS": "alt Y"
         }
      },
      {
         "Id": "Emacs+.ISYankChar",
         "Shortcut": {
            "FirstKS": "control alt Y"
         }
      },
      {
         "Id": "Emacs+.ISDeleteChar",
         "Shortcut": {
            "FirstKS": "control alt W"
         }
      },
      {
         "Id": "Emacs+.ISCase",
         "Shortcut": {
            "FirstKS": "alt C"
         }
      },
      {
         "Id": "Emacs+.ISMultiLine",
         "Shortcut": {
            "FirstKS": "alt M"
         }
      },
      {
         "Id": "Emacs+.ISRegex",
         "Shortcut": {
            "FirstKS": "alt R"
         }
      },
      {
         "Id": "Emacs+.ISWords",
         "Shortcut": {
            "FirstKS": "alt W"
         }
      },
      {
         "Id": "Emacs+.ISearchHistoryPrevious",
         "Shortcut": {
            "FirstKS": "alt P"
         }
      },
      {
         "Id": "Emacs+.ISearchHistoryNext",
         "Shortcut": {
            "FirstKS": "alt N"
         }
      },
      {
         "Id": "Emacs+.ISEnter",
         "Shortcut": {
            "FirstKS": "ENTER"
         }
      },
      {
         "Id": "Emacs+.ISForwardDelete",
         "Shortcut": {
            "FirstKS": "control D"
         }
      },
      {
         "Id": "Emacs+.SwitchToBuffer",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "B"
         }
      },
      {
         "Id": "Switcher"
      },
      {
         "Id": "RecentFiles"
      },
      {
         "Id": "Emacs+.TWSelectNext",
         "Shortcut": {
            "FirstKS": "control N"
         }
      },
      {
         "Id": "Emacs+.TWSelectPrevious",
         "Shortcut": {
            "FirstKS": "control P"
         }
      },
      {
         "Id": "Emacs+.TWInterrupt",
         "Shortcut": [
            {
               "FirstKS": "control G"
            },
            {
               "FirstKS": "control X",
               "SecondKS": "O"
            }
         ]
      },
      {
         "Id": "Emacs+.TWScrollUp",
         "Shortcut": {
            "FirstKS": "control V"
         }
      },
      {
         "Id": "Emacs+.TWScrollDown",
         "Shortcut": {
            "FirstKS": "alt V"
         }
      },
      {
         "Id": "Emacs+.TWBegin",
         "Shortcut": [
            {
               "FirstKS": "alt shift COMMA"
            },
            {
               "FirstKS": "alt LESS"
            }
         ]
      },
      {
         "Id": "Emacs+.TWEnd",
         "Shortcut": [
            {
               "FirstKS": "alt shift PERIOD"
            },
            {
               "FirstKS": "alt GREATER"
            }
         ]
      },
      {
         "Id": "FileChooser.TogglePathShowing",
         "Shortcut": {
            "FirstKS": "control X",
            "SecondKS": "control P"
         }
      },
      {
         "Id": "$Copy"
      },
      {
         "Id": "$Cut"
      },
      {
         "Id": "EditorCutLineBackward"
      },
      {
         "Id": "EditorCutLineEnd"
      },
      {
         "Id": "EditorKillToWordEnd"
      },
      {
         "Id": "EditorDeleteToWordStart"
      },
      {
         "Id": "EditorKillToWordStart"
      },
      {
         "Id": "EditorScrollToCenter"
      },
      {
         "Id": "EditorSwapSelectionBoundaries"
      },
      {
         "Id": "Find"
      },
      {
         "Id": "FindPrevious"
      },
      {
         "Id": "Replace"
      },
      {
         "Id": "JumpToLastChange"
      },
      {
         "Id": "EditorKillRegion"
      },
      {
         "Id": "$Paste"
      },
      {
         "Id": "PasteMultiple"
      },
      {
         "Id": "NextProjectWindow"
      },
      {
         "Id": "UnsplitAll"
      },
      {
         "Id": "Vcs.UpdateProject"
      },
      {
         "Id": "CompareTwoFiles"
      },
      {
         "Id": "Diff.ShowDiff"
      },
      {
         "Id": "CheckinProject"
      }
   ]
}