Page 1 of 4

Экспериментально: ProcessFarCommandLine

Posted: Fri 02 May, 2014 22:38
by Shmuel
А что если сделать так:
  • При вызове плагина с комстроки, плагин проверяет наличие глобальной функции LuaMacroCommandLine.
  • Если такая ф-ция есть - она вызывается, и ей передаётся комстрока.
  • Если ф-ция возвращает true, то плагин больше ничего не делает.
  • Если ф-ции нет, либо она возвращает nil/false/ничего, происходит обычная обработка комстроки.
???

Re: lm:post2

Posted: Fri 02 May, 2014 23:23
by John Doe
Вот если это в апи фара, и можно было бы любую комстроку обработать...

Re: lm:post2

Posted: Sat 03 May, 2014 09:50
by Shmuel
John Doe wrote:Вот если это в апи фара, и можно было бы любую комстроку обработать...
Можно, не трогая API Фара, передавать любую комстроку в LuaMacro и задействовать механизм, аналогичный изложенному в моём предыдущем посте. Попробовал, работает. Однако делать не буду без одобрения Far Group. Если одобрено не будет, сделаю только для комстроки LuaMacro.

Re: lm:post2

Posted: Sat 03 May, 2014 11:11
by John Doe
Для одобрения или неодобрения нужно больше информации.
Что именно предлагается, и как именно реализовать.

Не зная деталей я сомневаюсь, что описанное можно нормально сделать без апи.
В идеале должно быть так: при запуске чего-либо из командной строки фар передаёт текст комстроки плагину (может быть и не один).
Плагин либо выполняет какие-либо действия самостоятельно, либо трансформирует текст и передаёт на запуск фару.

Делать это только для комстроки LuaMacro - это совсем другое, применений несравнимо меньше.

Re: lm:post2

Posted: Sat 03 May, 2014 11:14
by Shmuel
John Doe wrote:Для одобрения или неодобрения нужно больше информации.
Что именно предлагается, и как именно реализовать.
Да вроде всю информацию изложил. Что неясно?

Re: lm:post2

Posted: Sat 03 May, 2014 11:29
by John Doe
Как именно плагин будет получать управление?
Где это может работать (комстрока? история? асооциации? ...?)
Преимущества такой реализации перед плагиновым АПИ?

Re: lm:post2

Posted: Sat 03 May, 2014 11:47
by Shmuel
Предполагается использовать уже изложенный механизм.
Фар перед исполнением введенной комстроки вызывает LuaMacro по уже имеющемуся приватному API и передаёт ему комстроку. LuaMacro вызывает предопределённую глобальную ф-цию, например ProcessFarCommandLine, затем передаёт Фару результат: нужно исполнять комстроку, или нет.

Re: lm:post2

Posted: Sat 03 May, 2014 11:54
by zg
John Doe wrote:Не зная деталей я сомневаюсь, что описанное можно нормально сделать без апи.
а вы не сомневайтесь. кастомная сортировка работает же.
Shmuel wrote:затем передаёт Фару результат: нужно исполнять комстроку, или нет.
может: true — исполнять то, что есть, false — не иссполнять, string — исполнять то, что в строке?

Re: lm:post2

Posted: Sat 03 May, 2014 11:56
by John Doe
Shmuel wrote:перед исполнением введенной комстроки вызывает LuaMacro
Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?

Re: lm:post2

Posted: Sat 03 May, 2014 11:57
by zg
John Doe wrote:
Shmuel wrote:перед исполнением введенной комстроки вызывает LuaMacro
Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?
оно из одного места выполняется. какие проблемы?

lm:post2

Posted: Sat 03 May, 2014 12:09
by John Doe
Проблем нет, идея отличная, неоднократно высказывалась в разных формах (например).
Хочу чтобы всё было предусмотрено.

Имхо функция на входе должна иметь не только саму строку, но и информацию откуда вызывается.
И на выходе не только false/true, но и возможность вернуть трансформированую строку.

Re: lm:post2

Posted: Sat 03 May, 2014 12:15
by NightRoman
John Doe wrote:
Shmuel wrote:перед исполнением введенной комстроки вызывает LuaMacro
Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?
Иногда хочется различать. В PowerShellFar я хотел бы различать, чтобы знать, добавлять команду в историю (комстрока) или нет (меню и ассоциации). Возможности нет, пришлось костыль ввести - если команда заканчивается на #, то она не добавляется в историю.

Re: lm:post2

Posted: Sat 03 May, 2014 12:29
by John Doe
Вроде когда-то обсуждалась идея о том, чтобы перед выполнением отправлять событие плагинам.
Каким-то плагинам надо вести историю, а какие-то могли бы трансформировать комстроку, или выполнять свои действия.

Re: lm:post2

Posted: Sat 03 May, 2014 13:33
by Shmuel
zg wrote:может: true — исполнять то, что есть, false — не иссполнять, string — исполнять то, что в строке?
Сделать элементарно, но никто ещё не привёл пример полезности подмены комстроки.
John Doe wrote:Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?
Честно говоря, изначальной идеей был только перехват собственно комстроки.
John Doe wrote:Хочу чтобы всё было предусмотрено.
Если что-то забудем, можно будет позже добавить. Необязательно, чтобы в первом же билде всё было учтено.

Насколько я понимаю, zg не против, другие разработчики могут высказать своё мнение.

Re: lm:post2

Posted: Sat 03 May, 2014 14:45
by John Doe
Shmuel wrote:Сделать элементарно, но никто ещё не привёл пример полезности подмены комстроки.
Собственные алиасы.
Поиск файлов для запуска в нестандартных местах.
Запуск lua-скриптов без указания префикса + поиск их в заданных папках.
Различная обработка командной строки в зависимости от контекста. Например, файлы по одной и той же маске из какой-то папки надо запускать иначе, чем из другой.
...