aboutsummaryrefslogtreecommitdiff
path: root/modules/textadept/keys.lua
diff options
context:
space:
mode:
Diffstat (limited to 'modules/textadept/keys.lua')
-rw-r--r--modules/textadept/keys.lua201
1 files changed, 102 insertions, 99 deletions
diff --git a/modules/textadept/keys.lua b/modules/textadept/keys.lua
index 50ea4dd7..1c2f8aaf 100644
--- a/modules/textadept/keys.lua
+++ b/modules/textadept/keys.lua
@@ -9,14 +9,10 @@ local M = {}
-- This module, should be 'require'ed last, but before _m.textadept.menu.
module('_m.textadept.keys')]]
-local keys, gui, _buffer, _view = keys, gui, buffer, view
-local m_textadept, m_editing = _m.textadept, _m.textadept.editing
-local c, OSX = _SCINTILLA.constants, OSX
-
-- Utility functions.
M.utils = {
enclose_as_xml_tags = function()
- m_editing.enclose('<', '>')
+ _m.textadept.editing.enclose('<', '>')
local buffer = buffer
local pos = buffer.current_pos
while buffer.char_at[pos - 1] ~= 60 do pos = pos - 1 end -- '<'
@@ -29,7 +25,7 @@ M.utils = {
select_command = function() _m.textadept.menu.select_command() end,
snapopen_filedir = function()
if buffer.filename then
- m_textadept.snapopen.open(buffer.filename:match('^(.+)[/\\]'))
+ _m.textadept.snapopen.open(buffer.filename:match('^(.+)[/\\]'))
end
end,
show_style = function()
@@ -99,6 +95,13 @@ events.connect(events.BUFFER_NEW, constantize_menu_buffer_functions)
-- Scintilla's first buffer does not have this.
if not RESETTING then constantize_menu_buffer_functions() end
+local keys = keys
+local io, gui, gui_find, buffer, view = io, gui, gui.find, buffer, view
+local m_textadept, m_editing = _m.textadept, _m.textadept.editing
+local m_bookmarks, m_snippets = m_textadept.bookmarks, m_textadept.snippets
+local OSX, c = OSX, _SCINTILLA.constants
+local utils = M.utils
+
--[[
Windows and Linux menu key commands.
@@ -135,25 +138,25 @@ if not RESETTING then constantize_menu_buffer_functions() end
keys[not OSX and 'cn' or 'mn'] = new_buffer
keys[not OSX and 'co' or 'mo'] = io.open_file
keys[not OSX and 'cao' or 'cmo'] = io.open_recent_file
-keys[not OSX and 'cO' or 'mO'] = _buffer.reload
-keys[not OSX and 'cs' or 'ms'] = _buffer.save
-keys[not OSX and 'cS' or 'mS'] = _buffer.save_as
-keys[not OSX and 'cw' or 'mw'] = _buffer.close
+keys[not OSX and 'cO' or 'mO'] = buffer.reload
+keys[not OSX and 'cs' or 'ms'] = buffer.save
+keys[not OSX and 'cS' or 'mS'] = buffer.save_as
+keys[not OSX and 'cw' or 'mw'] = buffer.close
keys[not OSX and 'cW' or 'mW'] = io.close_all
-- TODO: m_textadept.sessions.prompt_load
-- TODO: m_textadept.sessions.prompt_save
keys[not OSX and 'aq' or 'mq'] = quit
-- Edit.
-keys[not OSX and 'cz' or 'mz'] = _buffer.undo
-if not OSX then keys.cy = _buffer.redo end
-keys[not OSX and 'cZ' or 'mZ'] = _buffer.redo
-keys[not OSX and 'cx' or 'mx'] = _buffer.cut
-keys[not OSX and 'cc' or 'mc'] = _buffer.copy
-keys[not OSX and 'cv' or 'mv'] = _buffer.paste
-keys[not OSX and 'cd' or 'md'] = _buffer.line_duplicate
-keys.del = _buffer.clear
-keys[not OSX and 'ca' or 'ma'] = _buffer.select_all
+keys[not OSX and 'cz' or 'mz'] = buffer.undo
+if not OSX then keys.cy = buffer.redo end
+keys[not OSX and 'cZ' or 'mZ'] = buffer.redo
+keys[not OSX and 'cx' or 'mx'] = buffer.cut
+keys[not OSX and 'cc' or 'mc'] = buffer.copy
+keys[not OSX and 'cv' or 'mv'] = buffer.paste
+keys[not OSX and 'cd' or 'md'] = buffer.line_duplicate
+keys.del = buffer.clear
+keys[not OSX and 'ca' or 'ma'] = buffer.select_all
keys.cm = m_editing.match_brace
keys[not OSX and 'c\n' or 'cesc'] = { m_editing.autocomplete_word, '%w_' }
keys[not OSX and 'adel' or 'cdel'] = { m_editing.current_word, 'delete' }
@@ -175,9 +178,9 @@ keys[not OSX and 'cN' or 'mN'] = m_editing.select_line
keys[not OSX and 'cP' or 'mP'] = m_editing.select_paragraph
keys[not OSX and 'cI' or 'mI'] = m_editing.select_indented_block
-- Selection.
-keys[not OSX and 'cau' or 'cu'] = _buffer.upper_case
-keys[not OSX and 'caU' or 'cU'] = _buffer.lower_case
-keys[not OSX and 'a<' or 'c<'] = M.utils.enclose_as_xml_tags
+keys[not OSX and 'cau' or 'cu'] = buffer.upper_case
+keys[not OSX and 'caU' or 'cU'] = buffer.lower_case
+keys[not OSX and 'a<' or 'c<'] = utils.enclose_as_xml_tags
keys[not OSX and 'a>' or 'c>'] = { m_editing.enclose, '<', ' />' }
keys[not OSX and "a'" or "c'"] = { m_editing.enclose, "'", "'" }
keys[not OSX and 'a"' or 'c"'] = { m_editing.enclose, '"', '"' }
@@ -186,31 +189,31 @@ keys[not OSX and 'a[' or 'c['] = { m_editing.enclose, '[', ']' }
keys[not OSX and 'a{' or 'c{'] = { m_editing.enclose, '{', '}' }
keys[not OSX and 'c+' or 'm+'] = { m_editing.grow_selection, 1 }
keys[not OSX and 'c_' or 'm_'] = { m_editing.grow_selection, -1 }
-keys.csup = _buffer.move_selected_lines_up
-keys.csdown = _buffer.move_selected_lines_down
+keys.csup = buffer.move_selected_lines_up
+keys.csdown = buffer.move_selected_lines_down
-- Search.
-keys[not OSX and 'cf' or 'mf'] = gui.find.focus
-keys[not OSX and 'cg' or 'mg'] = gui.find.find_next
+keys[not OSX and 'cf' or 'mf'] = gui_find.focus
+keys[not OSX and 'cg' or 'mg'] = gui_find.find_next
if not OSX then keys.f3 = keys.cg end
-keys[not OSX and 'cG' or 'mG'] = gui.find.find_prev
+keys[not OSX and 'cG' or 'mG'] = gui_find.find_prev
if not OSX then keys.sf3 = keys.cG end
-keys[not OSX and 'car' or 'cr'] = gui.find.replace
-keys[not OSX and 'caR' or 'cR'] = gui.find.replace_all
+keys[not OSX and 'car' or 'cr'] = gui_find.replace
+keys[not OSX and 'caR' or 'cR'] = gui_find.replace_all
-- Find Next is an when find pane is focused.
-- Find Prev is ap when find pane is focused.
-- Replace is ar when find pane is focused.
-- Replace All is aa when find pane is focused.
-keys[not OSX and 'caf' or 'cmf'] = gui.find.find_incremental
-keys[not OSX and 'cF' or 'mF'] = M.utils.find_in_files
+keys[not OSX and 'caf' or 'cmf'] = gui_find.find_incremental
+keys[not OSX and 'cF' or 'mF'] = utils.find_in_files
-- Find in Files is ai when find pane is focused.
-keys[not OSX and 'cag' or 'cmg'] = { gui.find.goto_file_in_list, true }
-keys[not OSX and 'caG' or 'cmG'] = { gui.find.goto_file_in_list, false }
+keys[not OSX and 'cag' or 'cmg'] = { gui_find.goto_file_in_list, true }
+keys[not OSX and 'caG' or 'cmG'] = { gui_find.goto_file_in_list, false }
keys[not OSX and 'cj' or 'mj'] = m_editing.goto_line
-- Tools.
keys[not OSX and 'ce' or 'me'] = gui.command_entry.focus
-keys[not OSX and 'cE' or 'mE'] = M.utils.select_command
+keys[not OSX and 'cE' or 'mE'] = utils.select_command
keys[not OSX and 'cr' or 'mr'] = m_textadept.run.run
keys[not OSX and 'cR' or 'mR'] = m_textadept.run.compile
keys[not OSX and 'c|' or 'm|'] = m_textadept.filter_through.filter_through
@@ -218,101 +221,101 @@ keys[not OSX and 'c|' or 'm|'] = m_textadept.filter_through.filter_through
keys[not OSX and 'c ' or 'aesc'] = m_textadept.adeptsense.complete_symbol
keys.ch = m_textadept.adeptsense.show_documentation
-- Snippets.
-keys[not OSX and 'ck' or 'a\t'] = m_textadept.snippets._select
-keys['\t'] = m_textadept.snippets._insert
-keys['s\t'] = m_textadept.snippets._previous
-keys[not OSX and 'cK' or 'as\t'] = m_textadept.snippets._cancel_current
+keys[not OSX and 'ck' or 'a\t'] = m_snippets._select
+keys['\t'] = m_snippets._insert
+keys['s\t'] = m_snippets._previous
+keys[not OSX and 'cK' or 'as\t'] = m_snippets._cancel_current
-- Bookmark.
-keys[not OSX and 'cf2' or 'mf2'] = m_textadept.bookmarks.toggle
-keys[not OSX and 'csf2' or 'msf2'] = m_textadept.bookmarks.clear
-keys.f2 = m_textadept.bookmarks.goto_next
-keys.sf2 = m_textadept.bookmarks.goto_prev
-keys.af2 = m_textadept.bookmarks.goto_bookmark
+keys[not OSX and 'cf2' or 'mf2'] = m_bookmarks.toggle
+keys[not OSX and 'csf2' or 'msf2'] = m_bookmarks.clear
+keys.f2 = m_bookmarks.goto_next
+keys.sf2 = m_bookmarks.goto_prev
+keys.af2 = m_bookmarks.goto_bookmark
-- Snapopen.
keys[not OSX and 'cu' or 'mu'] = { m_textadept.snapopen.open, _USERHOME }
-- TODO: { m_textadept.snapopen.open, _HOME }
-keys[not OSX and 'caO' or 'cmO'] = M.utils.snapopen_filedir
-keys[not OSX and 'ci' or 'mi'] = M.utils.show_style
+keys[not OSX and 'caO' or 'cmO'] = utils.snapopen_filedir
+keys[not OSX and 'ci' or 'mi'] = utils.show_style
-- Buffer.
-keys['c\t'] = { _view.goto_buffer, _view, 1, true }
-keys['cs\t'] = { _view.goto_buffer, _view, -1, true }
+keys['c\t'] = { view.goto_buffer, view, 1, true }
+keys['cs\t'] = { view.goto_buffer, view, -1, true }
keys[not OSX and 'cb' or 'mb'] = gui.switch_buffer
-- Indentation.
--- TODO: { M.utils.set_indentation, 2 }
--- TODO: { M.utils.set_indentation, 3 }
--- TODO: { M.utils.set_indentation, 4 }
--- TODO: { M.utils.set_indentation, 8 }
-keys[not OSX and 'caT' or 'cT'] = { M.utils.toggle_property, 'use_tabs' }
+-- TODO: { utils.set_indentation, 2 }
+-- TODO: { utils.set_indentation, 3 }
+-- TODO: { utils.set_indentation, 4 }
+-- TODO: { utils.set_indentation, 8 }
+keys[not OSX and 'caT' or 'cT'] = { utils.toggle_property, 'use_tabs' }
keys[not OSX and 'cai' or 'ci'] = m_editing.convert_indentation
-- EOL Mode.
--- TODO: { M.utils.set_eol_mode, c.SC_EOL_CRLF }
--- TODO: { M.utils.set_eol_mode, c.SC_EOL_CR }
--- TODO: { M.utils.set_eol_mode, c.SC_EOL_LF }
+-- TODO: { utils.set_eol_mode, c.SC_EOL_CRLF }
+-- TODO: { utils.set_eol_mode, c.SC_EOL_CR }
+-- TODO: { utils.set_eol_mode, c.SC_EOL_LF }
-- Encoding.
--- TODO: { M.utils.set_encoding, 'UTF-8' }
--- TODO: { M.utils.set_encoding, 'ASCII' }
--- TODO: { M.utils.set_encoding, 'ISO-8859-1' }
--- TODO: { M.utils.set_encoding, 'MacRoman' }
--- TODO: { M.utils.set_encoding, 'UTF-16LE' }
+-- TODO: { utils.set_encoding, 'UTF-8' }
+-- TODO: { utils.set_encoding, 'ASCII' }
+-- TODO: { utils.set_encoding, 'ISO-8859-1' }
+-- TODO: { utils.set_encoding, 'MacRoman' }
+-- TODO: { utils.set_encoding, 'UTF-16LE' }
keys[not OSX and 'cL' or 'mL'] = m_textadept.mime_types.select_lexer
-keys.f5 = { _buffer.colourise, _buffer, 0, -1 }
+keys.f5 = { buffer.colourise, buffer, 0, -1 }
-- View.
keys[not OSX and 'can' or 'ca\t'] = { gui.goto_view, 1, true }
keys[not OSX and 'cap' or 'cas\t'] = { gui.goto_view, -1, true }
-keys[not OSX and 'cas' or 'cs'] = { _view.split, _view }
+keys[not OSX and 'cas' or 'cs'] = { view.split, view }
if not OSX then keys.cah = keys.cas end
-keys[not OSX and 'cav' or 'cv'] = { _view.split, _view, true }
-keys[not OSX and 'caw' or 'cw'] = { _view.unsplit, _view }
-keys[not OSX and 'caW' or 'cW'] = M.utils.unsplit_all
-keys[not OSX and 'ca+' or 'c+'] = { M.utils.grow, 10 }
-keys[not OSX and 'ca=' or 'c='] = { M.utils.grow, 10 }
-keys[not OSX and 'ca-' or 'c-'] = { M.utils.shrink, 10 }
--- TODO: M.utils.toggle_current_fold
-keys[not OSX and 'ca\n' or 'c\n'] = { M.utils.toggle_property, 'view_eol' }
+keys[not OSX and 'cav' or 'cv'] = { view.split, view, true }
+keys[not OSX and 'caw' or 'cw'] = { view.unsplit, view }
+keys[not OSX and 'caW' or 'cW'] = utils.unsplit_all
+keys[not OSX and 'ca+' or 'c+'] = { utils.grow, 10 }
+keys[not OSX and 'ca=' or 'c='] = { utils.grow, 10 }
+keys[not OSX and 'ca-' or 'c-'] = { utils.shrink, 10 }
+-- TODO: utils.toggle_current_fold
+keys[not OSX and 'ca\n' or 'c\n'] = { utils.toggle_property, 'view_eol' }
if not OSX then keys['ca\n\r'] = keys['ca\n'] end
-keys[not OSX and 'ca\\' or 'c\\'] = { M.utils.toggle_property, 'wrap_mode' }
+keys[not OSX and 'ca\\' or 'c\\'] = { utils.toggle_property, 'wrap_mode' }
keys[not OSX and 'caI' or 'cI'] =
- { M.utils.toggle_property, 'indentation_guides' }
-keys[not OSX and 'caS' or 'cS'] = { M.utils.toggle_property, 'view_ws' }
+ { utils.toggle_property, 'indentation_guides' }
+keys[not OSX and 'caS' or 'cS'] = { utils.toggle_property, 'view_ws' }
keys[not OSX and 'caV' or 'cV'] =
- { M.utils.toggle_property, 'virtual_space_options', c.SCVS_USERACCESSIBLE }
-keys[not OSX and 'c=' or 'm='] = _buffer.zoom_in
-keys[not OSX and 'c-' or 'm-'] = _buffer.zoom_out
-keys[not OSX and 'c0' or 'm0'] = M.utils.reset_zoom
+ { utils.toggle_property, 'virtual_space_options', c.SCVS_USERACCESSIBLE }
+keys[not OSX and 'c=' or 'm='] = buffer.zoom_in
+keys[not OSX and 'c-' or 'm-'] = buffer.zoom_out
+keys[not OSX and 'c0' or 'm0'] = utils.reset_zoom
keys[not OSX and 'cT' or 'mT'] = gui.select_theme
-- Help.
-keys.f1 = { M.utils.open_webpage, _HOME..'/doc/manual/1_Introduction.html' }
-keys.sf1 = { M.utils.open_webpage, _HOME..'/doc/index.html' }
+keys.f1 = { utils.open_webpage, _HOME..'/doc/manual/1_Introduction.html' }
+keys.sf1 = { utils.open_webpage, _HOME..'/doc/index.html' }
-- TODO: { gui.dialog, 'ok-msgbox', '--title', 'Textadept'
-- '--informative-text', _RELEASE, '--no-cancel' }
-- Movement commands.
if OSX then
keys.ck = function()
- buffer:line_end_extend()
- buffer:cut()
+ _G.buffer:line_end_extend()
+ _G.buffer:cut()
end
- keys.cf = _buffer.char_right
- keys.cF = _buffer.char_right_extend
- keys.cmf = _buffer.word_right
- keys.cmF = _buffer.word_right_extend
- keys.cb = _buffer.char_left
- keys.cB = _buffer.char_left_extend
- keys.cmb = _buffer.word_left
- keys.cmB = _buffer.word_left_extend
- keys.cn = _buffer.line_down
- keys.cN = _buffer.line_down_extend
- keys.cp = _buffer.line_up
- keys.cP = _buffer.line_up_extend
- keys.ca = _buffer.vc_home
- keys.cA = _buffer.vc_home_extend
- keys.ce = _buffer.line_end
- keys.cE = _buffer.line_end_extend
- keys.cd = _buffer.clear
- keys.cl = _buffer.vertical_centre_caret
+ keys.cf = buffer.char_right
+ keys.cF = buffer.char_right_extend
+ keys.cmf = buffer.word_right
+ keys.cmF = buffer.word_right_extend
+ keys.cb = buffer.char_left
+ keys.cB = buffer.char_left_extend
+ keys.cmb = buffer.word_left
+ keys.cmB = buffer.word_left_extend
+ keys.cn = buffer.line_down
+ keys.cN = buffer.line_down_extend
+ keys.cp = buffer.line_up
+ keys.cP = buffer.line_up_extend
+ keys.ca = buffer.vc_home
+ keys.cA = buffer.vc_home_extend
+ keys.ce = buffer.line_end
+ keys.cE = buffer.line_end_extend
+ keys.cd = buffer.clear
+ keys.cl = buffer.vertical_centre_caret
end
return M