CommandLine — запуск макросов по префиксам командной строки

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by John Doe »

Latest post of the previous page:

hoopoe wrote: но есть желание управлять этим из командной строки (a-la ViFM) + добавить логику для обработки хвоста команды
Не спорю, что стало удобнее, но хочу отметить, что через алиасы всё это было доступно и раньше.
Например.
  • Открыть из командной строки список ассоциаций: ass=lua: Keys "F9 c a RAlt" print "$*"
    Перейти во временную папку: tmp=chdir "%TMP%"
    Выполнить произвольный lua-скрипт (с передачей параметров): un=lua:@%FARPROFILE%\Macros\utils\un.lua
    И т.п.
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by hoopoe »

согласен, функционал префиксов и алиасов очень близок, но префиксы как раз удобнее тем, что гарантированно не пересекутся с дос командами :)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by John Doe »

hoopoe wrote: согласен, функционал префиксов и алиасов очень близок, но префиксы как раз удобнее тем, что гарантированно не пересекутся с дос командами
Вот тут как раз разницы нет, алиасы могут быть и с двоеточием
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by hoopoe »

и пробела после двоеточия не надо? :)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by John Doe »

Подловили )
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by hoopoe »

дядь, давай на ты :)

я привык просто к префиксам, и некоторые плуги можно переписать на Lua с меньшим количеством кода и большим функционалом :)
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

CommandLine — запуск макросов по префиксам командной строки

Post by gotar »

Может поделить строку после префикса на отдельные слова как это делает shell для Си main() и передавать в action массив строкок-параметров с ученом кавычек и т.п. вместо одной строки text?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

CommandLine — запуск макросов по префиксам командной строки

Post by Shmuel »

gotar wrote: Может поделить строку после префикса на отдельные слова как это делает shell для Си main() и передавать в action массив строкок-параметров с ученом кавычек и т.п. вместо одной строки text?
Если выскажется достаточное количество людей в пользу этого, можно будет сделать.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by John Doe »

Альтернативно: можно просто предоставить макросам функцию mf.SplitCommandLine
Помнится была такая:
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

CommandLine — запуск макросов по префиксам командной строки

Post by gotar »

John Doe, как Вы считаете, если SplitCommandLine будет вызываться до action, то это может комунибудь помешать? Как Вы думаете будут ли у Вас обработчики CommandLine с парметрами, которым функциональность SplitCommandLine будет не нужна?
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by hoopoe »

да запросто... далеко не всегда нужно пилить ком.строку: при работе с префиксами распил может усложнить жизнь. я за предложение джедая: добавить в API функу для распила - кому надо будет тот распилит. или совсем альтернативное предложение: массив отдавать третьим параметром callback'а (после префикса и оригинальной строки)
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

CommandLine — запуск макросов по префиксам командной строки

Post by gotar »

То есть у Вас было так: пишу программу на Си и думаю,-жалко, что не могу получить командную строку целиком, а только в виде отдельных параметров в массиве argv?
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by hoopoe »

да, когда Far Call писал - нужно было отдать шеллу строку именно в том виде, в котором она пришла
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by John Doe »

Альтернатива SplitCommandLine:

Code: Select all

local ffi = require"ffi"
local Shell32,C = ffi.load"Shell32",ffi.C
ffi.cdef[[//https://msdn.microsoft.com/library/bb776391
LPWSTR* CommandLineToArgvW(
  LPCWSTR lpCmdLine,//_In_
  int     *pNumArgs //_Out_
);
//http://msdn.microsoft.com/library/ms647492
int lstrlenW(const wchar_t *lpString);
]]

local wsize = ffi.sizeof"wchar_t"
local function CommandLineToArgv(CommandLine)
  local pNumArgs = ffi.new("int[1]")
  local CommandlineW = win.Utf8ToUtf16(CommandLine).."\0"
  local Argv = Shell32.CommandLineToArgvW(ffi.cast("LPCWSTR",CommandlineW),pNumArgs)
  if Argv~=nil then
    local argv = {}
    for i=0,pNumArgs[0]-1 do
      argv[i] = win.Utf16ToUtf8(ffi.string(Argv[i],C.lstrlenW(Argv[i])*wsize))
    end
    return argv
  end
end

Last edited by John Doe on Sun 17 Sep, 2017 13:12, edited 1 time in total.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

CommandLine — запуск макросов по префиксам командной строки

Post by Smitis »

John Doe,
Можно же упростить, избавившись от совершенно ненужной функции _w Shell32.CommandLineToArgvW(win.Utf8ToUtf16(CommandLine.."\0"),pNumArgs)
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

CommandLine — запуск макросов по префиксам командной строки

Post by John Doe »

Дествительно.Только cast ещё нужен.
Обновил.
Post Reply

Return to “Обсуждение макросов”