diff options
Diffstat (limited to 'modules/textadept/keys.lua')
-rw-r--r-- | modules/textadept/keys.lua | 167 |
1 files changed, 79 insertions, 88 deletions
diff --git a/modules/textadept/keys.lua b/modules/textadept/keys.lua index 25db537b..eb5c9301 100644 --- a/modules/textadept/keys.lua +++ b/modules/textadept/keys.lua @@ -271,17 +271,16 @@ module('textadept.keys')]] -- Control, Meta, and 'a' = 'ctrl+meta+a' local _L = _L -local m_edit = textadept.menu.menubar[_L['Edit']] -local m_sel, m_seln = m_edit[_L['Select']], m_edit[_L['Selection']] -local m_search = textadept.menu.menubar[_L['Search']] -local m_tools = textadept.menu.menubar[_L['Tools']] -local m_bookmark = m_tools[_L['Bookmarks']] -local m_qopen = m_tools[_L['Quick Open']] -local m_snippets = m_tools[_L['Snippets']] -local m_buffer = textadept.menu.menubar[_L['Buffer']] -local m_indentation = m_buffer[_L['Indentation']] -local m_view = textadept.menu.menubar[_L['View']] -local m_help = textadept.menu.menubar[_L['Help']] +-- Returns the menu command associated with the '/'-separated string of menu +-- labels. +-- Labels are automatically localized. +-- @param labels Path to the menu command. +-- @usage m('Edit/Select/Select in XML Tag') +local function m(labels) + local menu = textadept.menu.menubar + for label in labels:gmatch('[^/]+') do menu = menu[_L[label]] end + return menu[2] +end -- Bindings for Linux/Win32, macOS, Terminal. local bindings = { @@ -308,34 +307,33 @@ local bindings = { [textadept.editing.paste_reindent] = {'ctrl+V', 'cmd+V', 'meta+v'}, [buffer.line_duplicate] = {'ctrl+d', 'cmd+d', nil}, [buffer.clear] = {'del', {'del', 'ctrl+d'}, {'del', 'ctrl+d'}}, - [m_edit[_L['Delete Word']][2]] = - {'alt+del', 'ctrl+del', {'meta+del', 'meta+d'}}, + [m('Edit/Delete Word')] = {'alt+del', 'ctrl+del', {'meta+del', 'meta+d'}}, [buffer.select_all] = {'ctrl+a', 'cmd+a', 'meta+a'}, - [m_edit[_L['Match Brace']][2]] = {'ctrl+m', 'ctrl+m', 'meta+m'}, - [m_edit[_L['Complete Word']][2]] = + [m('Edit/Match Brace')] = {'ctrl+m', 'ctrl+m', 'meta+m'}, + [m('Edit/Complete Word')] = {'ctrl+\n', 'ctrl+esc', {'ctrl+meta+j', 'ctrl+\n'}}, [textadept.editing.toggle_comment] = {'ctrl+/', 'ctrl+/', 'meta+/'}, [textadept.editing.transpose_chars] = {'ctrl+t', 'ctrl+t', 'ctrl+t'}, [textadept.editing.join_lines] = {'ctrl+J', 'ctrl+j', 'meta+j'}, - [m_edit[_L['Filter Through']][2]] = {'ctrl+|', 'cmd+|', 'ctrl+\\'}, + [m('Edit/Filter Through')] = {'ctrl+|', 'cmd+|', 'ctrl+\\'}, -- Select. - [m_sel[_L['Select between Matching Delimiters']][2]] = + [m('Edit/Select/Select between Matching Delimiters')] = {'ctrl+M', 'ctrl+M', 'meta+M'}, - [m_sel[_L['Select between XML Tags']][2]] = {'ctrl+<', 'cmd+<', 'meta+<'}, - [m_sel[_L['Select in XML Tag']][2]] = {'ctrl+>', 'cmd+>', nil}, + [m('Edit/Select/Select between XML Tags')] = {'ctrl+<', 'cmd+<', 'meta+<'}, + [m('Edit/Select/Select in XML Tag')] = {'ctrl+>', 'cmd+>', nil}, [textadept.editing.select_word] = {'ctrl+D', 'cmd+D', 'meta+W'}, [textadept.editing.select_line] = {'ctrl+N', 'cmd+N', 'meta+N'}, [textadept.editing.select_paragraph] = {'ctrl+P', 'cmd+P', 'meta+P'}, -- Selection. [buffer.upper_case] = {'ctrl+alt+u', 'ctrl+u', 'ctrl+meta+u'}, [buffer.lower_case] = {'ctrl+alt+U', 'ctrl+U', 'ctrl+meta+l'}, - [m_seln[_L['Enclose as XML Tags']][2]] = {'alt+<', 'ctrl+<', 'meta+>'}, - [m_seln[_L['Enclose as Single XML Tag']][2]] = {'alt+>', 'ctrl+>', nil}, - [m_seln[_L['Enclose in Single Quotes']][2]] = {"alt+'", "ctrl+'", nil}, - [m_seln[_L['Enclose in Double Quotes']][2]] = {'alt+"', 'ctrl+"', nil}, - [m_seln[_L['Enclose in Parentheses']][2]] = {'alt+(', 'ctrl+(', 'meta+)'}, - [m_seln[_L['Enclose in Brackets']][2]] = {'alt+[', 'ctrl+[', 'meta+]'}, - [m_seln[_L['Enclose in Braces']][2]] = {'alt+{', 'ctrl+{', 'meta+}'}, + [m('Edit/Selection/Enclose as XML Tags')] = {'alt+<', 'ctrl+<', 'meta+>'}, + [m('Edit/Selection/Enclose as Single XML Tag')] = {'alt+>', 'ctrl+>', nil}, + [m('Edit/Selection/Enclose in Single Quotes')] = {"alt+'", "ctrl+'", nil}, + [m('Edit/Selection/Enclose in Double Quotes')] = {'alt+"', 'ctrl+"', nil}, + [m('Edit/Selection/Enclose in Parentheses')] = {'alt+(', 'ctrl+(', 'meta+)'}, + [m('Edit/Selection/Enclose in Brackets')] = {'alt+[', 'ctrl+[', 'meta+]'}, + [m('Edit/Selection/Enclose in Braces')] = {'alt+{', 'ctrl+{', 'meta+}'}, [buffer.move_selected_lines_up] = {'ctrl+shift+up', 'ctrl+shift+up', 'ctrl+shift+up'}, [buffer.move_selected_lines_down] = @@ -346,10 +344,10 @@ local bindings = { -- TODO: textadept.history.record -- TODO: textadept.history.clear -- Preferences. - [m_edit[_L['Preferences']][2]] = {'ctrl+p', 'cmd+,', 'meta+~'}, + [m('Edit/Preferences')] = {'ctrl+p', 'cmd+,', 'meta+~'}, -- Search. - [m_search[_L['Find']][2]] = {'ctrl+f', 'cmd+f', {'meta+f', 'meta+F'}}, + [m('Search/Find')] = {'ctrl+f', 'cmd+f', {'meta+f', 'meta+F'}}, [ui.find.find_next] = {{'ctrl+g', 'f3'}, 'cmd+g', 'meta+g'}, [ui.find.find_prev] = {{'ctrl+G', 'shift+f3'}, 'cmd+G', 'meta+G'}, [ui.find.replace] = {'ctrl+alt+r', 'ctrl+r', 'meta+r'}, @@ -358,38 +356,37 @@ local bindings = { -- Find Prev is ap when find pane is focused in GUI. -- Replace is ar when find pane is focused in GUI. -- Replace All is aa when find pane is focused in GUI. - [m_search[_L['Find Incremental']][2]] = - {'ctrl+alt+f', 'ctrl+cmd+f', 'ctrl+meta+f'}, - [m_search[_L['Find in Files']][2]] = {'ctrl+F', 'cmd+F', nil}, + [m('Search/Find Incremental')] = {'ctrl+alt+f', 'ctrl+cmd+f', 'ctrl+meta+f'}, + [m('Search/Find in Files')] = {'ctrl+F', 'cmd+F', nil}, -- Find in Files is ai when find pane is focused in GUI. - [m_search[_L['Goto Next File Found']][2]] = {'ctrl+alt+g', 'ctrl+cmd+g', nil}, - [m_search[_L['Goto Previous File Found']][2]] = - {'ctrl+alt+G', 'ctrl+cmd+G', nil}, + [m('Search/Goto Next File Found')] = {'ctrl+alt+g', 'ctrl+cmd+g', nil}, + [m('Search/Goto Previous File Found')] = {'ctrl+alt+G', 'ctrl+cmd+G', nil}, [textadept.editing.goto_line] = {'ctrl+j', 'cmd+j', 'ctrl+j'}, -- Tools. - [m_tools[_L['Command Entry']][2]] = {'ctrl+e', 'cmd+e', 'meta+c'}, - [m_tools[_L['Select Command']][2]] = {'ctrl+E', 'cmd+E', 'meta+C'}, + [m('Tools/Command Entry')] = {'ctrl+e', 'cmd+e', 'meta+c'}, + [m('Tools/Select Command')] = {'ctrl+E', 'cmd+E', 'meta+C'}, [textadept.run.run] = {'ctrl+r', 'cmd+r', 'ctrl+r'}, [textadept.run.compile] = {'ctrl+R', 'cmd+R', 'ctrl+meta+r'}, - [m_tools[_L['Set Arguments...']][2]] = {'ctrl+A', 'cmd+A', nil}, + [textadept.run.set_arguments] = {'ctrl+A', 'cmd+A', nil}, [textadept.run.build] = {'ctrl+B', 'cmd+B', 'ctrl+meta+b'}, [textadept.run.stop] = {'ctrl+X', 'cmd+X', 'ctrl+meta+x'}, - [m_tools[_L['Next Error']][2]] = {'ctrl+alt+e', 'ctrl+cmd+e', 'meta+x'}, - [m_tools[_L['Previous Error']][2]] = {'ctrl+alt+E', 'ctrl+cmd+E', 'meta+X'}, + [m('Tools/Next Error')] = {'ctrl+alt+e', 'ctrl+cmd+e', 'meta+x'}, + [m('Tools/Previous Error')] = {'ctrl+alt+E', 'ctrl+cmd+E', 'meta+X'}, -- Bookmark. [textadept.bookmarks.toggle] = {'ctrl+f2', 'cmd+f2', 'f1'}, [textadept.bookmarks.clear] = {'ctrl+shift+f2', 'cmd+shift+f2', 'f6'}, - [m_bookmark[_L['Next Bookmark']][2]] = {'f2', 'f2', 'f2'}, - [m_bookmark[_L['Previous Bookmark']][2]] = {'shift+f2', 'shift+f2', 'f3'}, + [m('Tools/Bookmarks/Next Bookmark')] = {'f2', 'f2', 'f2'}, + [m('Tools/Bookmarks/Previous Bookmark')] = {'shift+f2', 'shift+f2', 'f3'}, [textadept.bookmarks.goto_mark] = {'alt+f2', 'alt+f2', 'f4'}, -- Macros. [textadept.macros.record] = {'f9', 'f9', 'f9'}, [textadept.macros.play] = {'shift+f9', 'shift+f9', 'f10'}, -- Quick Open. - [m_qopen[_L['Quickly Open User Home']][2]] = {'ctrl+u', 'cmd+u', 'ctrl+u'}, - -- TODO: m_qopen[_L['Quickly Open Textadept Home']][2] - [m_qopen[_L['Quickly Open Current Directory']][2]] = + [m('Tools/Quick Open/Quickly Open User Home')] = + {'ctrl+u', 'cmd+u', 'ctrl+u'}, + -- TODO: m('Tools/Quickly Open Textadept Home') + [m('Tools/Quick Open/Quickly Open Current Directory')] = {'ctrl+alt+O', 'ctrl+cmd+O', 'meta+O'}, [io.quick_open] = {'ctrl+alt+P', 'ctrl+cmd+P', 'ctrl+meta+p'}, -- Snippets. @@ -397,59 +394,58 @@ local bindings = { [textadept.snippets.insert] = {'\t', '\t', '\t'}, [textadept.snippets.previous] = {'shift+\t', 'shift+\t', 'shift+\t'}, [textadept.snippets.cancel_current] = {'esc', 'esc', 'esc'}, - [m_snippets[_L['Complete Trigger Word']][2]] = {'ctrl+k', 'alt+\t', 'meta+k'}, + [m('Tools/Snippets/Complete Trigger Word')] = {'ctrl+k', 'alt+\t', 'meta+k'}, -- Other. - [m_tools[_L['Complete Symbol']][2]] = {'ctrl+ ', 'alt+esc', 'ctrl+ '}, + [m('Tools/Complete Symbol')] = {'ctrl+ ', 'alt+esc', 'ctrl+ '}, [textadept.editing.show_documentation] = {'ctrl+h', 'ctrl+h', {'meta+h', 'meta+H'}}, - [m_tools[_L['Show Style']][2]] = {'ctrl+i', 'cmd+i', 'meta+I'}, + [m('Tools/Show Style')] = {'ctrl+i', 'cmd+i', 'meta+I'}, -- Buffer. - [m_buffer[_L['Next Buffer']][2]] = {'ctrl+\t', 'ctrl+\t', 'meta+n'}, - [m_buffer[_L['Previous Buffer']][2]] = - {'ctrl+shift+\t', 'ctrl+shift+\t', 'meta+p'}, + [m('Buffer/Next Buffer')] = {'ctrl+\t', 'ctrl+\t', 'meta+n'}, + [m('Buffer/Previous Buffer')] = {'ctrl+shift+\t', 'ctrl+shift+\t', 'meta+p'}, [ui.switch_buffer] = {'ctrl+b', 'cmd+b', {'meta+b', 'meta+B'}}, -- Indentation. - -- TODO: m_indentation[_L['Tab width: 2']][2] - -- TODO: m_indentation[_L['Tab width: 3']][2] - -- TODO: m_indentation[_L['Tab width: 4']][2] - -- TODO: m_indentation[_L['Tab width: 8']][2] - [m_indentation[_L['Toggle Use Tabs']][2]] = + -- TODO: m('Buffer/Indentation/Tab width: 2') + -- TODO: m('Buffer/Indentation/Tab width: 3') + -- TODO: m('Buffer/Indentation/Tab width: 4') + -- TODO: m('Buffer/Indentation/Tab width: 8') + [m('Buffer/Indentation/Toggle Use Tabs')] = {'ctrl+alt+T', 'ctrl+T', {'meta+t', 'meta+T'}}, [textadept.editing.convert_indentation] = {'ctrl+alt+i', 'ctrl+i', 'meta+i'}, -- EOL Mode. - -- TODO: m_buffer[_L['EOL Mode']][_L['CRLF']][2] - -- TODO: m_buffer[_L['EOL Mode']][_L['LF']][2] + -- TODO: m('Buffer/EOL Mode/CRLF') + -- TODO: m('Buffer/EOL Mode/LF') -- Encoding. - -- TODO: m_buffer[_L['Encoding']][_L['UTF-8 Encoding']][2] - -- TODO: m_buffer[_L['Encoding']][_L['ASCII Encoding']][2] - -- TODO: m_buffer[_L['Encoding']][_L['CP-1252 Encoding']][2] - -- TODO: m_buffer[_L['Encoding']][_L['UTF-16 Encoding']][2] - [m_buffer[_L['Toggle Wrap Mode']][2]] = {'ctrl+alt+\\', 'ctrl+\\', nil}, - [m_buffer[_L['Toggle View Whitespace']][2]] = {'ctrl+alt+S', 'ctrl+S', nil}, + -- TODO: m('Buffer/Encoding/UTF-8 Encoding') + -- TODO: m('Buffer/Encoding/ASCII Encoding') + -- TODO: m('Buffer/Encoding/CP-1252 Encoding') + -- TODO: m('Buffer/Encoding/UTF-16 Encoding') + [m('Buffer/Toggle Wrap Mode')] = {'ctrl+alt+\\', 'ctrl+\\', nil}, + [m('Buffer/Toggle View Whitespace')] = {'ctrl+alt+S', 'ctrl+S', nil}, [textadept.file_types.select_lexer] = {'ctrl+L', 'cmd+L', 'meta+L'}, -- View. - [m_view[_L['Next View']][2]] = {'ctrl+alt+n', 'ctrl+alt+\t', nil}, - [m_view[_L['Previous View']][2]] = {'ctrl+alt+p', 'ctrl+alt+shift+\t', nil}, - [m_view[_L['Split View Horizontal']][2]] = + [m('View/Next View')] = {'ctrl+alt+n', 'ctrl+alt+\t', nil}, + [m('View/Previous View')] = {'ctrl+alt+p', 'ctrl+alt+shift+\t', nil}, + [m('View/Split View Horizontal')] = {{'ctrl+alt+s', 'ctrl+alt+h'}, 'ctrl+s', nil}, - [m_view[_L['Split View Vertical']][2]] = {'ctrl+alt+v', 'ctrl+v', nil}, - [m_view[_L['Unsplit View']][2]] = {'ctrl+alt+w', 'ctrl+w', nil}, - [m_view[_L['Unsplit All Views']][2]] = {'ctrl+alt+W', 'ctrl+W', nil}, - [m_view[_L['Grow View']][2]] = + [m('View/Split View Vertical')] = {'ctrl+alt+v', 'ctrl+v', nil}, + [m('View/Unsplit View')] = {'ctrl+alt+w', 'ctrl+w', nil}, + [m('View/Unsplit All Views')] = {'ctrl+alt+W', 'ctrl+W', nil}, + [m('View/Grow View')] = {{'ctrl+alt++', 'ctrl+alt+='}, {'ctrl++', 'ctrl+='}, nil}, - [m_view[_L['Shrink View']][2]] = {'ctrl+alt+-', 'ctrl+-', nil}, - [m_view[_L['Toggle Current Fold']][2]] = {'ctrl+*', 'cmd+*', 'meta+*'}, - [m_view[_L['Toggle Show Indent Guides']][2]] = {'ctrl+alt+I', 'ctrl+I', nil}, - [m_view[_L['Toggle Virtual Space']][2]] = {'ctrl+alt+V', 'ctrl+V', nil}, + [m('View/Shrink View')] = {'ctrl+alt+-', 'ctrl+-', nil}, + [m('View/Toggle Current Fold')] = {'ctrl+*', 'cmd+*', 'meta+*'}, + [m('View/Toggle Show Indent Guides')] = {'ctrl+alt+I', 'ctrl+I', nil}, + [m('View/Toggle Virtual Space')] = {'ctrl+alt+V', 'ctrl+V', nil}, [view.zoom_in] = {'ctrl+=', 'cmd+=', nil}, [view.zoom_out] = {'ctrl+-', 'cmd+-', nil}, - [m_view[_L['Reset Zoom']][2]] = {'ctrl+0', 'cmd+0', nil}, + [m('View/Reset Zoom')] = {'ctrl+0', 'cmd+0', nil}, -- Help. - [m_help[_L['Show Manual']][2]] = {'f1', 'f1', nil}, - [m_help[_L['Show LuaDoc']][2]] = {'shift+f1', 'shift+f1', nil}, + [m('Help/Show Manual')] = {'f1', 'f1', nil}, + [m('Help/Show LuaDoc')] = {'shift+f1', 'shift+f1', nil}, -- Movement commands. -- Unbound keys are handled by Scintilla, but when playing back a macro, this @@ -486,7 +482,7 @@ local bindings = { [buffer.document_start] = {nil, nil, 'ctrl+meta+a'}, [buffer.document_end] = {nil, nil, 'ctrl+meta+e'}, - [function(b) + [function() buffer:line_end_extend() if not buffer.selection_empty then buffer:cut() else buffer:clear() end end] = {nil, 'ctrl+k', 'ctrl+k'}, @@ -519,16 +515,11 @@ end if CURSES then keys['ctrl+meta+v'] = { - n = m_view[_L['Next View']][2], - p = m_view[_L['Previous View']][2], - s = m_view[_L['Split View Horizontal']][2], - h = m_view[_L['Split View Horizontal']][2], - v = m_view[_L['Split View Vertical']][2], - w = m_view[_L['Unsplit View']][2], - W = m_view[_L['Unsplit All Views']][2], - ['+'] = m_view[_L['Grow View']][2], - ['='] = m_view[_L['Grow View']][2], - ['-'] = m_view[_L['Shrink View']][2] + n = m('View/Next View'), p = m('View/Previous View'), + s = m('View/Split View Horizontal'), h = m('View/Split View Horizontal'), + v = m('View/Split View Vertical'), w = m('View/Unsplit View'), + W = m('View/Unsplit All Views'), ['+'] = m('View/Grow View'), + ['='] = m('View/Grow View'), ['-'] = m('View/Shrink View') } end |