Возможность ввода многострочных команд

Хотите говорить о Far и не знаете, куда обратиться?
Post Reply
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Возможность ввода многострочных команд

Post by gene.pavlovsky »

Как бы получить возможность вводить команды на более, чем одну строчку?
Например, в bash в конце строчки можно поставить \, в cmd можно поставить ^; нажать на Enter и можно продолжать вводить команду на следующей строке. В обоих, правда, нет возможности вернуться на уже введённую строчку.
Думаю, в Фаре мог бы быть удобный интерфейс для ввода многострочных команд, с возможностью "гулять" по команде вверх и вниз.
Есть такие планы, идеи по реализации?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Возможность ввода мультистрочных команд

Post by zg »

макрос, открывающий редактор с текущим содержимым комстроки и устанавливающий её после закрытия пишется легко.
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Возможность ввода мультистрочных команд

Post by gene.pavlovsky »

zg wrote:макрос, открывающий редактор с текущим содержимым комстроки и устанавливающий её после закрытия пишется легко.
Пожалуй, это может быть наиболее простым, и вполне удобным решением. В этом случае, правда, потеряется auto-completion путей и переменных окружения. Было бы здорово, если бы редактор мог запускаться в режиме редактирования командной строки (в контексте текущего пути) - с поддержкой auto-completion и синтаксической подсветки.
Я более-менее разобрался с lua, но не настолько сведущ в написании Фар-макросов, чтобы для меня это было "легко". Получить/установить комстроку я могу, а как вызвать редактор с текущим содержимым, в выбранном режиме синтакс подсветки (скажем batch file если ComSpec == cmd, или bash script если у меня ComSpec == bash), а потом получить результат этого редактирования?
Для теста написал макрос, заменяющий в ком строке символы ; на \n.

echo 1; echo 2 превращается в echo 1◙ echo 2. В истории команд выглядит так же. Было бы здорово, если Фар отображал бы этот символ как U+240A, правда для этого надо будет его отображать из какого-то другого шрифта. Но в целом это вполне юзабельно. Полагаю, если запустить макрос опять, в редакторе всё будет выглядит так же, как и было при первом редактировании (т.е. с сохранением многострочности и индентов).

Одно но - попытка выполнить команду через cmd не приводит к успеху - cmd выполняет только echo 1. Вот как с этим быть, неясно. Добавлять в макросе символ & перед каждым переводом строки?
Я свой wrapper для использования Far с bash только что доработал, многострочные команды выполняются. В принципе мне этого достаточно, осталось дописать макрос.
Last edited by gene.pavlovsky on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: [spoiler]
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Возможность ввода мультистрочных команд

Post by zg »

gene.pavlovsky wrote:В этом случае, правда, потеряется auto-completion путей и переменных окружения.
текущие макровозможности позволяют реализовать и такое. возможно не так просто, но позволяют.
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Возможность ввода мультистрочных команд

Post by gene.pavlovsky »

Надо начать с малого. Как же всё-таки открыть редактор с нужным текстом (и установкой языка для синтакс-й подсветки), а потом получить результат редактирования? Через временный файл (если да, то как лучше выбрать его имя и местоположение)?
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Возможность ввода мультистрочных команд

Post by HaRT »

gene.pavlovsky, посмотритеx Edit из DialogTools — там код на Си, но аналогичный подход можно применить и на Луа.
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Исправлена ссылка
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Возможность ввода мультистрочных команд

Post by Shmuel »

gene.pavlovsky wrote: Как же всё-таки открыть редактор с нужным текстом (и установкой языка для синтакс-й подсветки), а потом получить результат редактирования?
Готовый код можете взять из postmacro.lua. Там, правда, не комстрока, а поле диалога обрабатывается, но это легко подправить для комстроки.
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Возможность ввода мультистрочных команд

Post by gene.pavlovsky »

Shmuel wrote:Готовый код можете взять из postmacro.lua. Там, правда, не комстрока, а поле диалога обрабатывается, но это легко подправить для комстроки.
Прекрасно! То, что доктор прописал. Теперь макрос делает всё, что нужно:

Попутно такой вопрос, что это за зелёная буква P в верхнем левом углу? Знак того, что редактор вызван из плаг-ина?
https://i.imgur.com/satk1MU.png

Кстати, а для чего вы обычно используете свой postmacro? Примеры из ежедневной жизни.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Возможность ввода мультистрочных команд

Post by zg »

зелёная P - индикатор исполнения макроса.
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Возможность ввода мультистрочных команд

Post by gene.pavlovsky »

zg wrote:зелёная P - индикатор исполнения макроса.
Понял. На первый взгляд я подумал, что это буква диска (у меня R:\tmp) :)
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Возможность ввода мультистрочных команд

Post by citRiks »

Тут таки да.
Товарищ мыслил в верном направлении, жаль что потерялся для общества.
Открывать редактирование команд в редакторе всем хорошо,
кроме того что нафик теряется даже то autocompletion что есть в ФАРе.
Правда тут может помочь много-уважаемый полярник и писатель А. Буняк,
который как раз в последнее время достиг тех высот в редакторных autocompletion которых еще никто не достигал.
От себя я отмечу вот что:
1.) есть такая отдельная неплохо проработанная тема "programmed autocompletions (for command line)",
что означает что в эту тему можно вписаться, скорее всего малой кровью, унаследовав все уже придуманное и продуманное богатство.
2.) конктретно есть всем известная библиотека-проект readline, - которая "вот это все"
3.) есть такая очень хорошая вещь cLink, который обертка для windows для readline,
реализует наиболее важную функциональность из ком. строки баша в windows cmd,
но нам он наоболее дорог тем что по счастливой случайности cLink в наиболее нам интересной его части написан на Луа
Точнее интеграция с readline написана на Луа,
что облегчает выдирание и передирание функциональности в ФАР,
и здорово для не сильно знакомых с C++ но знакомых с Луа.
4.) В cLinke прямо уже "искаропки" есть структуры на Lua описывающие completions для команд cmd, git, powershell, итд.,
т.е. по моему набор не меньший чем в искаробочной ком. строке фара, который можно перенести в редактор.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Возможность ввода многострочных команд

Post by citRiks »

А разработчикам ФАРа я бы предложил вынести дополнения ком. строки в АПИ для общего пользования.
ReadLine так-то и в самом ФАРе сидит унутри, я правда глубоко не вникал как там дела.
Вынести в АПИ, и в редактор добавить окна autocompletions которые уже есть для команд command-line,
это ведь уже существующая рабочая фунцкиональность ФАРа,
в редакторе заработает с полпинка минимальными изменениями (ИМХО).

PS
И любом случае, а почему эти замечательные плавающие окошечки completions есть почти везде - ком. строка, диалоги, но нет в редакторе?
Post Reply

Return to “Обсуждение Far Manager”