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

Здесь обсуждается всё, что касается макросов.
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

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

Post by hoopoe » Thu 26 Mar, 2015 11:13

Latest post of the previous page:

согласен, функционал префиксов и алиасов очень близок, но префиксы как раз удобнее тем, что гарантированно не пересекутся с дос командами :)

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 26 Mar, 2015 11:20

hoopoe wrote: согласен, функционал префиксов и алиасов очень близок, но префиксы как раз удобнее тем, что гарантированно не пересекутся с дос командами
Вот тут как раз разницы нет, алиасы могут быть и с двоеточием

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

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

Post by hoopoe » Thu 26 Mar, 2015 11:53

и пробела после двоеточия не надо? :)

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 26 Mar, 2015 11:58

Подловили )

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

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

Post by hoopoe » Thu 26 Mar, 2015 12:06

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

я привык просто к префиксам, и некоторые плуги можно переписать на Lua с меньшим количеством кода и большим функционалом :)

gotar
Posts: 296
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Post by gotar » Thu 26 Mar, 2015 16:25

Может поделить строку после префикса на отдельные слова как это делает shell для Си main() и передавать в action массив строкок-параметров с ученом кавычек и т.п. вместо одной строки text?

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 26 Mar, 2015 16:53

gotar wrote: Может поделить строку после префикса на отдельные слова как это делает shell для Си main() и передавать в action массив строкок-параметров с ученом кавычек и т.п. вместо одной строки text?
Если выскажется достаточное количество людей в пользу этого, можно будет сделать.

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 26 Mar, 2015 17:06

Альтернативно: можно просто предоставить макросам функцию mf.SplitCommandLine
Помнится была такая:

gotar
Posts: 296
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Post by gotar » Thu 26 Mar, 2015 20:33

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 » Fri 27 Mar, 2015 07:39

да запросто... далеко не всегда нужно пилить ком.строку: при работе с префиксами распил может усложнить жизнь. я за предложение джедая: добавить в API функу для распила - кому надо будет тот распилит. или совсем альтернативное предложение: массив отдавать третьим параметром callback'а (после префикса и оригинальной строки)

gotar
Posts: 296
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Post by gotar » Fri 27 Mar, 2015 08:52

То есть у Вас было так: пишу программу на Си и думаю,-жалко, что не могу получить командную строку целиком, а только в виде отдельных параметров в массиве argv?

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

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

Post by hoopoe » Fri 27 Mar, 2015 09:06

да, когда Far Call писал - нужно было отдать шеллу строку именно в том виде, в котором она пришла

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 15 Sep, 2017 18:04

Альтернатива 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.

Smitis
Posts: 1492
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

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

Post by Smitis » Sun 17 Sep, 2017 11:13

John Doe,
Можно же упростить, избавившись от совершенно ненужной функции _w Shell32.CommandLineToArgvW(win.Utf8ToUtf16(CommandLine.."\0"),pNumArgs)
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sun 17 Sep, 2017 13:13

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

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Wed 04 Oct, 2017 06:49

Если передать CommandLineToArgv пустую строку, то вернётся полное имя far.exe
Ничего о таком поведении в документации не нашёл.

Smitis
Posts: 1492
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

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

Post by Smitis » Wed 04 Oct, 2017 07:34

John Doe,
If this parameter is an empty string the function returns the path to the current executable file.
Разум когда-нибудь победит.

Post Reply

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