summaryrefslogtreecommitdiff
path: root/context/data/textadept/context/modules/textadept-context-files.lua
diff options
context:
space:
mode:
Diffstat (limited to 'context/data/textadept/context/modules/textadept-context-files.lua')
-rw-r--r--context/data/textadept/context/modules/textadept-context-files.lua826
1 files changed, 0 insertions, 826 deletions
diff --git a/context/data/textadept/context/modules/textadept-context-files.lua b/context/data/textadept/context/modules/textadept-context-files.lua
deleted file mode 100644
index ef016372e..000000000
--- a/context/data/textadept/context/modules/textadept-context-files.lua
+++ /dev/null
@@ -1,826 +0,0 @@
-local info = {
- version = 1.002,
- comment = "file handler for textadept for context/metafun",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files",
-}
-
-local lexer = require("scite-context-lexer")
-local context = lexer.context
-
-local char, format, gsub = string.char, string.format, string.gsub
-
--- What is _CHARSET doing ... I don't want any messing with conversion at all. Scite is
--- more clever with e.g. pdf. How can I show non ascii as escapes.
-
--- I'll add a few more keybindings. I mostly made this file for my own use and as a
--- fallback for SciTE as it runs on all os's. It might evolve ... who knows.
-
-io.encodings = {
- "UTF-8",
- "ASCII",
- "UTF-16",
-}
-
--- We need this for for instance pdf files (faster too):
-
-local sevenbitascii = { }
-for i=127,255 do
- sevenbitascii[char(i)] = format("0x%02X",i)
-end
-
-local function setsevenbitascii(buffer)
- -- we cannot directly assign sevenbitascii to buffer
- local representation = buffer.representation
- for k, v in next, sevenbitascii do
- representation[k] = v
- end
-end
-
--- Here we rebind keys. For this we need to load the alternative runner framework. I will
--- probably change the menu.
-
-local oldrunner = textadept.run
-local runner = require("textadept-context-runner")
-
--- local function userunner(runner)
--- --
--- keys [OSX and 'mr' or 'cr' ] = runner.process or runner.run
--- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = runner.check or runner.compile
--- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = runner.preview or runner.build
--- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = runner.quit or runner.stop
--- --
--- textadept.menu.menubar [_L['_Tools']] [_L['_Run']] [2] = runner.process or runner.run
--- textadept.menu.menubar [_L['_Tools']] [_L['_Compile']] [2] = runner.check or runner.compile
--- textadept.menu.menubar [_L['_Tools']] [_L['Buil_d']] [2] = runner.preview or runner.build
--- textadept.menu.menubar [_L['_Tools']] [_L['S_top']] [2] = runner.quit or runner.stop
--- --
--- end
-
--- I played a while with supporting both systems alongsize but getting the menus
--- synchronized is a real pain and semi-random. So, I decided to just drop the
--- old. And I don't want to implement a full variant now. Anyway, after that
--- conclusion I decided to replace not only the tools menu.
-
-local SEPARATOR = { "" }
-local newmenu = { }
-local newkeys = { }
-
-do
-
- newmenu.file = {
-
- title = "_File",
-
- { "_New", buffer.new },
- { "_Open", io.open_file },
- { "Open _Recent", io.open_recent_file },
- { "Re_load", io.reload_file },
- { "_Save", io.save_file },
- { "Save _As", io.save_file_as },
- { "Save All", io.save_all_files },
-
- SEPARATOR,
-
- { "_Close", io.close_buffer },
- { "Close All", io.close_all_buffers },
-
- -- SEPARATOR,
-
- -- { "Loa_d Session", textadept.session.load },
- -- { "Sav_e Session", textadept.session.save },
-
- SEPARATOR,
-
- { _L["_Quit"], quit },
-
- }
-
- -- maybe just the same keys on all ... or duplicate on osx
-
- newkeys[OSX and "mn" or "cn"] = buffer.new
- newkeys[OSX and "mo" or "co"] = io.open_file
- newkeys[OSX and "cmo" or "cao"] = io.open_recent_file
- newkeys[OSX and "ms" or "cs"] = io.save_file
- newkeys[OSX and "mS" or "cS"] = io.save_file_as
- newkeys[OSX and "mw" or "cw"] = io.close_buffer
- newkeys[OSX and "mW" or "cW"] = io.close_all_buffers
-
-end
-
-do
-
- local function complete_symbol()
- textadept.editing.autocomplete(buffer:get_lexer(true))
- end
-
- newmenu.edit = {
-
- title = "_Edit",
-
- SEPARATOR,
-
- { "_Undo", buffer.undo },
- { "_Redo", buffer.redo },
-
- SEPARATOR,
-
- { "Cu_t", buffer.cut },
- { "_Copy", buffer.copy },
- { "_Paste", buffer.paste },
- { "_Delete", buffer.clear },
- { "Select _All", buffer.select_all },
-
- SEPARATOR,
-
- { "Duplicate _Line", buffer.line_duplicate },
-
- SEPARATOR,
-
- { "Toggle _Block Comment", runner.blockcomment },
- { "_Upper Case Selection", buffer.upper_case },
- { "_Lower Case Selection", buffer.lower_case },
-
- }
-
- newkeys[OSX and "mz" or "cz"] = buffer.undo
- newkeys[OSX and "my" or "cy"] = buffer.redo
- newkeys[OSX and "mx" or "cx"] = buffer.cut
- newkeys[OSX and "mc" or "cc"] = buffer.copy
- newkeys[OSX and "mv" or "cv"] = buffer.paste
- newkeys[OSX and "ma" or "ca"] = buffer.select_all
-
- newkeys[OSX and "mD" or "cD"] = textadept.editing.select_word
- newkeys[OSX and "mN" or "cN"] = textadept.editing.select_line
- newkeys[OSX and "mP" or "cP"] = textadept.editing.select_paragraph
-
- newkeys["del"] = buffer.clear
- newkeys["cy"] = buffer.redo
-
- newkeys[OSX and "md" or "cd"] = buffer.line_duplicate
- newkeys[OSX and "cu" or "cau"] = buffer.upper_case
- newkeys[OSX and "cU" or "caU"] = buffer.lower_case
-
- newkeys[OSX and "mq" or "cq"] = runner.blockcomment
-
- newkeys[OSX and "ml" or "cl"] = buffer.line_delete
-
- -- Do I ever use these?
-
- -- newkeys["cf"] = buffer.char_right
- -- newkeys["cF"] = buffer.char_right_extend
- -- newkeys["cmf"] = buffer.word_right
- -- newkeys["cmF"] = buffer.word_right_extend
- -- newkeys["cb"] = buffer.char_left
- -- newkeys["cB"] = buffer.char_left_extend
- -- newkeys["cmb"] = buffer.word_left
- -- newkeys["cmB"] = buffer.word_left_extend
- -- newkeys["cn"] = buffer.line_down
- -- newkeys["cN"] = buffer.line_down_extend
- -- newkeys["cp"] = buffer.line_up
- -- newkeys["cP"] = buffer.line_up_extend
- -- newkeys["ca"] = buffer.vc_home
- -- newkeys["cA"] = buffer.vc_home_extend
- -- newkeys["ce"] = buffer.line_end
- -- newkeys["cE"] = buffer.line_end_extend
- -- newkeys["aright"] = buffer.word_right
- -- newkeys["aleft"] = buffer.word_left
- -- newkeys["cdv"] = buffer.clear
- -- newkeys["ck"] = function() buffer:line_end_extend() buffer:cut() end
- -- newkeys["cl"] = buffer.vertical_centre_caret
-
- newkeys.fn = OSX and function() return true end or nil
-
- newkeys[OSX and "c@" or "c "] = complete_symbol
-
-end
-
-do
-
- local function find_in_file()
- ui.find.in_files = false
- ui.find.focus()
- end
-
- local function find_in_files()
- ui.find.in_files = true
- ui.find.focus()
- end
-
- local function find_next_in_files()
- ui.find.goto_file_found(false,true)
- end
-
- local function find_previous_in_files()
- ui.find.goto_file_found(false,false)
- end
-
- newmenu.search = {
-
- title = "_Search",
-
- SEPARATOR,
-
- { "_Find", find_in_file },
- { "Find _Next", ui.find.find_next },
- { "Find _Previous", ui.find.find_prev },
- { "_Replace", ui.find.replace },
- { "Replace _All", ui.find.replace_all },
- { "Find _Incremental", ui.find.find_incremental },
-
- SEPARATOR,
-
- { "Find in Fi_les", find_in_files },
- { "Goto Nex_t File Found", find_next_in_files },
- { "Goto Previou_s File Found", find_previous_in_files },
-
- SEPARATOR,
-
- { "_Jump to", textadept.editing.goto_line }
-
- }
-
- -- The few times I use osx I want the same keys ... better explicitly handle
- -- "not GUI" but I have to test the curses version first anyway.
-
- newkeys[OSX and "mf" or "cf"] = find_in_file
- newkeys[OSX and "mg" or "cg"] = ui.find.find_next
- newkeys[OSX and "mG" or "cG"] = ui.find.find_prev
- newkeys[OSX and "mg" or "cg"] = textadept.editing.goto_line
-
- newkeys["f3"] = not OSX and ui.find.find_next or nil
- newkeys["sf3"] = not OSX and ui.find.find_prev or nil
-
- newkeys[OSX and "cr" or "car"] = ui.find.replace
- newkeys[OSX and "cR" or "caR"] = ui.find.replace_all
- newkeys[OSX and "cmf" or "caf"] = ui.find.find_incremental
-
- newkeys[OSX and "mF" or "cF"] = find_in_files
- newkeys[OSX and "cmg" or "cag"] = find_next_in_files
- newkeys[OSX and "cmG" or "caG"] = find_previous_in_files
-
-end
-
-do
-
- io.quick_open_max = 5000
-
- local function isdir(path)
- return path and path ~= "" and lfs.attributes(path,"mode") == "directory"
- end
-
- local function resolveroot(path)
- local path = runner.resultof("mtxrun --resolve-path TEXMFCONTEXT")
- if path then
- return string.match(path,"(.-)%s$")
- end
- end
-
- local function opencurrentdirectory()
- local path = buffer.filename
- if path and path ~= "" then
- path = string.match(path,"^(.+)[/\\]")
- if isdir(path) then
- io.quick_open(path)
- end
- end
- end
-
- local function openuserdirectory()
- local path = resolveroot("TEXMFPROJECT")
- if isdir(path) then
- io.quick_open(path .. "/tex/context/user")
- end
- end
-
- local function openbasedirectory()
- local path = resolveroot("TEXMFCONTEXT")
- if isdir(path) then
- io.quick_open(path .. "/tex/context/base/mkiv")
- end
- end
-
- local started = false
-
- local function startservice()
- if WIN32 then
- os.execute([[cmd /c start /min "Context Documentation" mtxrun --script server --auto]])
- else
- os.execute([[mtxrun --script server --start > ~/context-wwwserver.log &]])
- end
- started = true
- end
-
- local function showcommand()
- -- if not started then
- -- startservice()
- -- end
- local start = buffer.selection_n_start[0]
- local stop = buffer.selection_n_end[0]
- if start == stop then
- buffer:set_target_range(buffer:word_start_position(start,true),buffer:word_end_position(stop,true))
- else
- buffer:set_target_range(start,stop)
- end
- local word = buffer.target_text
- os.execute(format([[mtxrun --gethelp --url="http://localhost:8088/mtx-server-ctx-help.lua?command=%s"]],word or ""))
- end
-
- newmenu.tools = {
-
- title = "_Tools",
-
- SEPARATOR,
-
- { "Check Source", runner.check },
- { "Process Source", runner.process },
- { "Preview Result", runner.preview },
- { "Show Log File", runner.install("logfile") },
- { "Quit", runner.quit },
-
- SEPARATOR,
-
- { "Open Current Directory", opencurrentdirectory },
- { "Open User Directory", openuserdirectory },
- { "Open Base Directory", openbasedirectory },
-
- SEPARATOR,
-
- { "Purge Files", runner.install("purge") },
- { "Clear Cache", runner.install("clear") },
- { "Generate File Database", runner.install("generate") },
- { "Generate Font Database", runner.install("fonts") },
-
- SEPARATOR,
-
- { "Typeset Listing", runner.install("listing") },
- { "Process and Arrange", runner.install("arrange") },
-
- SEPARATOR,
-
- { "Start Document Service", startservice },
- { "Goto Document Service", showcommand },
-
- SEPARATOR,
-
- { "Show Unicodes", runner.unicodes },
-
- -- We need this bogus entry because otherwise we get a message due to macros.lua. I
- -- might need to come up with some proper placeholder. Well, let's for now just
- -- live with the crash.
-
- -- SEPARATOR,
- --
- -- { "Select Co_mmand", textadept.editing.goto_line },
-
-}
-
- -- newkeys[OSX and "mc" or "cc"] = runner.check
- newkeys[OSX and "mr" or "cr"] = runner.process
- newkeys[OSX and "mp" or "cp"] = runner.preview
- -- newkeys[OSX and "mx" or "cx"] = runner.quit -- makes no sense
-
- newkeys["f7"] = runner.process
- newkeys["f12"] = runner.process
-
- newkeys["f2"] = runner.unicodes
-
-end
-
-do
-
- local function use_tabs()
- buffer.use_tabs = not buffer.use_tabs
- events.emit(events.UPDATE_UI) -- for updating statusbar
- end
-
- local function set_eol_mode_crlf()
- set_eol_mode(buffer.EOL_CRLF)
- end
-
- local function set_eol_mode_lf()
- set_eol_mode(buffer.EOL_LF)
- end
-
- local function show_eol()
- buffer.view_eol = not buffer.view_eol
- end
-
- local function wrap_mode()
- buffer.wrap_mode = buffer.wrap_mode == 0 and buffer.WRAP_WHITESPACE or 0
- end
-
- function show_white_space()
- buffer.view_ws = buffer.view_ws == 0 and buffer.WS_VISIBLEALWAYS or 0
- end
-
- local function update_lexing()
- buffer:colourise(0,-1)
- end
-
- function set_endoding_utf8()
- set_encoding("UTF-8")
- end
-
- function set_encoding_ascii()
- set_encoding("ASCII")
- end
-
- function set_endoding_utf16le()
- set_encoding("UTF-16LE")
- end
-
- function set_endoding_utf16Be()
- set_encoding("UTF-16BE")
- end
-
- function goto_prev_buffer()
- view:goto_buffer(-1)
- end
-
- function goto_next_buffer()
- view:goto_buffer(1)
- end
-
- newmenu.buffer = {
-
- title = "_Buffer",
-
- SEPARATOR,
-
- { "_Previous Buffer", goto_prev_buffer },
- { "_Next Buffer", goto_next_buffer },
- { "_Switch to Buffer", ui.switch_buffer },
-
- SEPARATOR,
-
- { "_Toggle Use Tabs", use_tabs },
- {
- title = "EOL Mode",
-
- { "_CRLF", set_eol_mode_crlf },
- { "_LF", set_eol_mode_lf },
- },
- {
- title = "Encoding",
-
- { "_ASCII", set_encoding_ascii },
- { "_UTF-8", set_encoding_utf8 },
- { "UTF-16-_BE", set_encoding_utf16le },
- { "UTF-16-_LE", set_encoding_utf16be },
- },
-
- SEPARATOR,
-
- { "Toggle View _EOL", show_eol },
- { "Toggle _Wrap Mode", wrap_mode },
- { "Toggle View _Spacing", show_whitespace },
-
- SEPARATOR,
-
- { "Select _Lexer", textadept.file_types.select_lexer },
- { "Refresh _Syntax Highlighting", update_lexing }
-
- }
-
- newkeys["f5"] = update_lexing
-
- newkeys[OSX and "mp" or "cs\t"] = goto_prev_buffer
- newkeys[OSX and "mn" or "c\t"] = goto_next_buffer
- newkeys[OSX and "mb" or "cb"] = ui.switch_buffer
-
-end
-
-do
-
- local function toggle_current_fold()
- buffer:toggle_fold(buffer:line_from_position(buffer.current_pos))
- end
-
- local function toggle_show_guides()
- local off = buffer.indentation_guides == 0
- buffer.indentation_guides = off and buffer.IV_LOOKBOTH or 0
- end
-
- local function toggle_virtual_space()
- local off = buffer.virtual_space_options == 0
- buffer.virtual_space_options = off and buffer.VS_USERACCESSIBLE or 0
- end
-
- local function reset_zoom()
- buffer.zoom = 0
- end
-
- newmenu.view = {
-
- title = "_View",
-
- SEPARATOR,
-
- { "Toggle Current _Fold" , toggle_current_fold },
-
- SEPARATOR,
-
- { "Toggle Show In_dent Guides", toggle_show_guides },
- { "Toggle _Virtual Space", toggle_virtual_space },
-
- SEPARATOR,
-
- { "Zoom _In", buffer.zoom_in },
- { "Zoom _Out", buffer.zoom_out },
- { "_Reset Zoom", reset_zoom },
-
- }
-
- newkeys[OSX and "m=" or "c="] = buffer.zoom_in
- newkeys[OSX and "m-" or "c-"] = buffer.zoom_out
- newkeys[OSX and "m0" or "c0"] = reset_zoom
-
-end
-
-do
-
- -- It"s a pitt y that we can"t have a proper monospaced font here so we try to make the best of it:
-
- local template = "\n\trelease info: %s\t\n\n\tcopyright: %s\t\n\n\tvariant: ConTeXt related editing\t\n\n\tadapted by: Hans Hagen\t"
-
- function show_about()
- ui.dialogs.msgbox {
- title = "about",
- informative_text = format(template,(gsub(_RELEASE,"%s+"," ")),(gsub(_COPYRIGHT,"%s+"," ")))
- }
- end
-
- local function open_url(url) -- adapted from non public open_page
- local cmd = (WIN32 and 'start ""') or (OSX and "open") or "xdg-open"
- os.spawn(format('%s "%s"', cmd, url))
- end
-
-
- newmenu.help = {
-
- title = "_Help",
-
- SEPARATOR,
-
- { "ConTeXt garden wiki", function() open_url("http://www.contextgarden.net") end },
-
- -- SEPARATOR,
-
- { "_About", show_about }
-
- }
-
-end
-
-do
-
- -- from shift F11 and startup script
-
- table.insert(textadept.menu.context_menu, SEPARATOR)
-
- table.insert(textadept.menu.context_menu, { "wrap", runner.wrap })
- table.insert(textadept.menu.context_menu, { "unwrap", runner.unwrap })
- table.insert(textadept.menu.context_menu, { "sort", runner.sort })
- -- table.insert(textadept.menu.context_menu, { "document", function() end })
- -- table.insert(textadept.menu.context_menu, { "quote", function() end })
- -- table.insert(textadept.menu.context_menu, { "compound", function() end })
- -- table.insert(textadept.menu.context_menu, { "add", function() end })
- -- table.insert(textadept.menu.context_menu, { "bidi", function() end })
- -- table.insert(textadept.menu.context_menu, { "strip", function() end })
-
-
- -- cM wrap
- -- cR reset spelling
- -- cI insert template
- -- cE show log
- -- c+ toggle strip
-
- newkeys[OSX and "mm" or "cm"] = runner.wrap
-
-end
-
-do
-
- local function replace(oldmenu,newmenu)
- local n = #newmenu
- local o = #oldmenu
- for i=1,n do
- oldmenu[i] = newmenu[i]
- end
- for i=o,n+1,-1 do
- oldmenu[i] = nil
- end
- end
-
- replace(textadept.menu.menubar [_L["_File"]], newmenu.file)
- replace(textadept.menu.menubar [_L["_Edit"]], newmenu.edit)
- replace(textadept.menu.menubar [_L["_Search"]], newmenu.search)
- replace(textadept.menu.menubar [_L["_Tools"]], newmenu.tools)
- replace(textadept.menu.menubar [_L["_Buffer"]], newmenu.buffer)
- replace(textadept.menu.menubar [_L["_View"]], newmenu.view)
- replace(textadept.menu.menubar [_L["_Help"]], newmenu.help)
-
- local char = string.char
-
- local combi = {
- "c", "m", "a",
- "cm", "ca", "ma",
- }
-
- local pad = {
- "esc", "del", "bs",
- "up", "down", "left", "right",
- "end", "home",
- "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12",
- }
-
- local s = "s"
-
- for i=1,#combi do
- local c = combi[i]
- for i=0x20,0x40 do
- local ci = char(i)
- keys[ c..ci] = nil
- keys[s..c..ci] = nil
- end
- for i=0x41,0x5A do -- A .. Z
- local ci = char(i)
- keys[ c..ci] = nil
- end
- for i=0x5B,0x60 do
- local ci = char(i)
- keys[ c..ci] = nil
- keys[s..c..ci] = nil
- end
- for i=0x61,0x7A do -- a .. z
- local ci = char(i)
- keys[ c..ci] = nil
- end
- for i=0x7B,0x7F do
- local ci = char(i)
- keys[ c..ci] = nil
- keys[s..c..ci] = nil
- end
- for i=1,#pad do
- local pi = pad[i]
- keys[ c..pi] = nil
- keys[s..c..pi] = nil
- end
- end
-
- for k, v in next, newkeys do
- keys[k] = v
- end
-
- -- add helper to textadept-context-runner.lua instead
-
- events.connect(events.INITIALIZED, function()
- for i=1,#_BUFFERS do
- local buffer = _BUFFERS[i]
- if buffer._type == OUTPUT_BUFFER then
- view:goto_buffer(i)
- io.close_buffer()
- return
- end
- end
- end)
-
-end
-
--- We have a different way to set up files and runners. Less distributed and morein the way we
--- do things in context.
-
-local dummyrunner = function() end
-local extensions = textadept.file_types.extensions
-local specifications = runner.specifications
-local setters = { }
-local defaults = {
- check = dummyrunner,
- process = dummyrunner,
- preview = dummyrunner,
-}
-
-setmetatable(specifications, { __index = defaults })
-
-function context.install(specification)
- local suffixes = specification.suffixes
- if suffixes then
- local lexer = specification.lexer
- local setter = specification.setter
- local encoding = specification.encoding
- for i=1,#suffixes do
- local suffix = suffixes[i]
- if lexer and extensions then
- extensions[suffix] = lexer
- end
- specifications[suffix] = specification
- if lexer then
- setters[lexer] = function()
- if encoding == "7-BIT-ASCII" then
- setsevenbitascii(buffer)
- end
- if setter then
- setter(lexer)
- end
- end
- end
- end
- end
-end
-
--- Too much interference so I might drop all the old stuff eventually.
-
-local function synchronize(lexer)
- if lexer then
- local setter = lexer and setters[lexer]
- if setter then
- local action = context.synchronize
- if action then
- action()
- end
- -- userunner()
- setter(lexer)
- else
- -- useoldrunner()
- end
- end
-end
-
-events.connect(events.FILE_OPENED,function(filename)
- synchronize(buffer:get_lexer())
-end)
-
-events.connect(events.LEXER_LOADED,function(lexer)
- synchronize(lexer)
-end)
-
--- obsolete
-
--- events.connect(events.BUFFER_AFTER_SWITCH,function()
--- synchronize(buffer:get_lexer())
--- end)
-
--- events.connect(events.VIEW_AFTER_SWITCH,function()
--- synchronize(buffer:get_lexer())
--- end)
-
--- events.connect(events.BUFFER_NEW,function()
--- synchronize(buffer:get_lexer())
--- end)
-
--- events.connect(events.VIEW_NEW,function()
--- synchronize(buffer:get_lexer())
--- end)
-
--- events.connect(events.RESET_AFTER,function()
--- synchronize(buffer:get_lexer())
--- end)
-
--- local oldtools = { }
--- local usingold = false
--- local toolsmenu = textadept.menu.menubar [_L['_Tools']]
---
--- for i=1,#toolsmenu do
--- oldtools[i] = toolsmenu[i]
--- end
---
--- local function replace(tools)
--- local n = #toolsmenu
--- local m = #tools
--- for i=1,m do
--- toolsmenu[i] = tools[i]
--- end
--- for i=n,m+1,-1 do
--- toolsmenu[i] = nil
--- end
--- end
---
--- local function useoldrunner()
--- if not usingold then
--- keys [OSX and 'mr' or 'cr' ] = oldrunner.run
--- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = oldrunner.compile
--- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = oldrunner.build
--- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = oldrunner.stop
--- --
--- replace(oldtools)
--- --
--- usingold = true
--- end
--- end
---
--- local function userunner()
--- if usingold then
--- keys [OSX and 'mr' or 'cr' ] = runner.process
--- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = runner.check
--- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = runner.preview
--- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = runner.quit
--- --
--- replace(newtools)
--- --
--- usingold = false
--- end
--- end
---
--- userunner()