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

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

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

Postby Shmuel » Fri 02 May, 2014 22:38

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

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

Re: lm:post2

Postby John Doe » Fri 02 May, 2014 23:23

Вот если это в апи фара, и можно было бы любую комстроку обработать...

Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

Re: lm:post2

Postby Shmuel » Sat 03 May, 2014 09:50

John Doe wrote:Вот если это в апи фара, и можно было бы любую комстроку обработать...

Можно, не трогая API Фара, передавать любую комстроку в LuaMacro и задействовать механизм, аналогичный изложенному в моём предыдущем посте. Попробовал, работает. Однако делать не буду без одобрения Far Group. Если одобрено не будет, сделаю только для комстроки LuaMacro.

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

Re: lm:post2

Postby John Doe » Sat 03 May, 2014 11:11

Для одобрения или неодобрения нужно больше информации.
Что именно предлагается, и как именно реализовать.

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

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

Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

Re: lm:post2

Postby Shmuel » Sat 03 May, 2014 11:14

John Doe wrote:Для одобрения или неодобрения нужно больше информации.
Что именно предлагается, и как именно реализовать.

Да вроде всю информацию изложил. Что неясно?

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

Re: lm:post2

Postby John Doe » Sat 03 May, 2014 11:29

Как именно плагин будет получать управление?
Где это может работать (комстрока? история? асооциации? ...?)
Преимущества такой реализации перед плагиновым АПИ?

Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

Re: lm:post2

Postby Shmuel » Sat 03 May, 2014 11:47

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

User avatar
zg
zero-gravity
Posts: 5212
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 41 times
Contact:

Re: lm:post2

Postby zg » Sat 03 May, 2014 11:54

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

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

Re: lm:post2

Postby John Doe » Sat 03 May, 2014 11:56

Shmuel wrote:перед исполнением введенной комстроки вызывает LuaMacro
Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?

User avatar
zg
zero-gravity
Posts: 5212
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 41 times
Contact:

Re: lm:post2

Postby zg » Sat 03 May, 2014 11:57

John Doe wrote:
Shmuel wrote:перед исполнением введенной комстроки вызывает LuaMacro
Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?
оно из одного места выполняется. какие проблемы?

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

lm:post2

Postby John Doe » Sat 03 May, 2014 12:09

Проблем нет, идея отличная, неоднократно высказывалась в разных формах (например).
Хочу чтобы всё было предусмотрено.

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

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

Re: lm:post2

Postby NightRoman » Sat 03 May, 2014 12:15

John Doe wrote:
Shmuel wrote:перед исполнением введенной комстроки вызывает LuaMacro
Из истории? Через ассоциации? Из меню пользователя? Из Apply Command?

Иногда хочется различать. В PowerShellFar я хотел бы различать, чтобы знать, добавлять команду в историю (комстрока) или нет (меню и ассоциации). Возможности нет, пришлось костыль ввести - если команда заканчивается на #, то она не добавляется в историю.

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

Re: lm:post2

Postby John Doe » Sat 03 May, 2014 12:29

Вроде когда-то обсуждалась идея о том, чтобы перед выполнением отправлять событие плагинам.
Каким-то плагинам надо вести историю, а какие-то могли бы трансформировать комстроку, или выполнять свои действия.

Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

Re: lm:post2

Postby Shmuel » Sat 03 May, 2014 13:33

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

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

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

Re: lm:post2

Postby John Doe » Sat 03 May, 2014 14:45

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

Shmuel
Posts: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

Re: lm:post2

Postby Shmuel » Sat 03 May, 2014 16:15

Закоммитил. Экспериментируйте.
Дальнейшее участие коллег из Far Group, лучше меня знающих код Фара, было бы весьма желательным.


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

Who is online

Users browsing this forum: No registered users and 2 guests