X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=mod_query%2Fmod_query.lua;h=d3ef7a06b031952a40a250cfb9a1286976526d30;hb=562cb4d37ba7667ac846fc3d426b152d21ef2c22;hp=b5bdd71ada47e108a6ae080ca9469bb281fd1301;hpb=d2a43a53786878c1273313249d3b49f6cd559b00;p=ion3.git diff --git a/mod_query/mod_query.lua b/mod_query/mod_query.lua index b5bdd71..d3ef7a0 100644 --- a/mod_query/mod_query.lua +++ b/mod_query/mod_query.lua @@ -1,7 +1,7 @@ -- -- ion/query/mod_query.lua -- Some common queries for Ion -- --- Copyright (c) Tuomo Valkonen 2004-2007. +-- Copyright (c) Tuomo Valkonen 2004-2008. -- -- See the included file LICENSE for details. -- @@ -238,13 +238,14 @@ mod_query.COLLECT_THRESHOLD=2000 --DOC -- This function can be used to read completions from an external source. -- The parameter \var{cp} is the completion proxy to be used, --- and the string \var{cmd} the shell command to be executed. To its stdout, --- the command should on the first line write the \var{common_beg} +-- and the string \var{cmd} the shell command to be executed, in the directory +-- \var{wd}. +-- To its stdout, the command should on the first line write the \var{common_beg} -- parameter of \fnref{WComplProxy.set_completions} (which \var{fn} maybe used -- to override) and a single actual completion on each of the successive lines. -- The function \var{reshnd} may be used to override a result table -- building routine. -function mod_query.popen_completions(cp, cmd, fn, reshnd) +function mod_query.popen_completions(cp, cmd, fn, reshnd, wd) local pst={cp=cp, maybe_stalled=0} @@ -317,12 +318,14 @@ function mod_query.popen_completions(cp, cmd, fn, reshnd) if not found_clean then pipes[rcv]=pst - ioncore.popen_bgread(cmd, coroutine.wrap(rcv)) + ioncore.popen_bgread(cmd, coroutine.wrap(rcv), nil, wd) end end local function mk_completion_test(str, sub_ok, casei_ok) + local settings=mod_query.get() + if not str then return function(s) return true end end @@ -336,9 +339,10 @@ local function mk_completion_test(str, sub_ok, casei_ok) end end - local casei=(casei_ok and mod_query.get().caseicompl) + casei_ok=(casei_ok and settings.caseicompl) + sub_ok=(sub_ok and settings.substrcompl) - if not casei then + if not casei_ok then return mk(str, sub_ok) else local fn=mk(string.lower(str), sub_ok) @@ -488,7 +492,10 @@ function mod_query.workspace_handler(mplex, name) local scr=mplex:screen_of() local function mkws() - local tmpl={name=name, switchto=true} + local tmpl={ + name=(name~="" and name), + switchto=true + } if not ioncore.create_ws(scr, tmpl, layout) then error(TR("Unknown error")) end @@ -743,7 +750,7 @@ local function find_point(strs, point) end -function mod_query.exec_completor(wedln, str, point) +function mod_query.exec_completor_(wd, wedln, str, point) local parts=break_cmdline(str) local complidx=find_point(parts, point+1) @@ -801,11 +808,16 @@ function mod_query.exec_completor(wedln, str, point) if ic then mod_query.popen_completions(wedln, ic..wp..string.shell_safe(s_compl), - set_fn, filter_fn) + set_fn, filter_fn, wd) end end +function mod_query.exec_completor(...) + mod_query.exec_completor_(nil, ...) +end + + local cmd_overrides={} @@ -835,9 +847,12 @@ end -- \file{ion-runinxterm}. Two colons ('::') will ask you to press -- enter after the command has finished. function mod_query.query_exec(mplex) - mod_query.query(mplex, TR("Run:"), nil, mod_query.exec_handler, - mod_query.exec_completor, - "run") + local function compl(...) + local wd=ioncore.get_dir_for(mplex) + mod_query.exec_completor_(wd, ...) + end + mod_query.query(mplex, TR("Run:"), nil, mod_query.exec_handler, + compl, "run") end @@ -919,7 +934,7 @@ function mod_query.complete_ssh(str) end local res = {} - local tst = mk_completion_test(host, true, false) + local tst = mk_completion_test(host, true, true) for _, v in ipairs(mod_query.ssh_completions) do if tst(v) then @@ -1200,8 +1215,7 @@ function mod_query.query_menu(mplex, sub, themenu, prompt) local ntab=xform_menu({}, menu, "") local function complete(str) - -- casei_ok false, because everything is already in lower case - return mod_query.complete_keys(ntab, str, true, false) + return mod_query.complete_keys(ntab, str, true, true) end local function handle(mplex, str)