Page 1 of 2

Как установить формат приглашения командной строки из макроса?

Posted: Tue 17 Jul, 2018 12:29
by fps
Как установить формат приглашения командной строки из макроса?

Как его получить нашел: Far.GetConfig("Cmdline.PromptFormat")
Но нет команды Far.SetConfig().

Как установить формат приглашения командной строки из макроса?

Posted: Tue 17 Jul, 2018 13:37
by Shmuel
fps wrote:
Tue 17 Jul, 2018 12:29
нет команды Far.SetConfig()
Её нет, поскольку среди разработчиков есть мнение, что это была бы опасная фича.
Конкретно я полагаю, что не более опасная, чем многое другое, но уважаю другие мнения.

Есть ещё одна важная причина - недокументированность большинства установок, что позволяет делать изменения и не бояться, что поломаются плагины/макросы.

Как установить формат приглашения командной строки из макроса?

Posted: Tue 17 Jul, 2018 17:49
by fps
Shmuel, понятно.
А другим способом можно это как-то сделать, кроме как Keys("F9 O и так далее")?
Интересует изменение приглашения текущей сессии (не глобальное)

Как установить формат приглашения командной строки из макроса?

Posted: Tue 17 Jul, 2018 18:40
by Shmuel
В cmd.exe есть команда prompt. Как сделать в Фаре - не знаю, может кто другой подскажет.

Как установить формат приглашения командной строки из макроса?

Posted: Tue 17 Jul, 2018 22:07
by DrKnS
В промпте поддерживаются переменные окружения. Можно поставить туда какую-нибудь %myvar% и менять её динамически.

Как установить формат приглашения командной строки из макроса?

Posted: Wed 18 Jul, 2018 03:19
by fps
DrKnS, спасибо такой способ подошел бы. Но в случае, когда myvar имеет пустое значение, FAR вставляет в приглашение её название, а не значение.
Баг?

Как установить формат приглашения командной строки из макроса?

Posted: Wed 18 Jul, 2018 04:30
by fps
В заголовке окна так же - туда можно прописать %myvar%, но если переменная не задана, то в заголовок так и выведется "%myvar%".
Похоже что это поведение так и задумано. Для отладки возможно это и удобно.
Но как его предполагалось пользоваться?
На мой взгляд, нелогично, что в зависимости от значения переменной выводится то её значение, то её название.

Как установить формат приглашения командной строки из макроса?

Posted: Thu 19 Jul, 2018 04:38
by fps
Как-то можно настроить, чтобы пустое значение переменной тоже подставлялось в приглашение и/или заголовок окна?

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 07:34
by IgorZ
На всякий случай укажу ещё один способ.
  1. Скачиваем и ставим sqlite3.dll.
  2. Скачиваем и ставим модуль ljsqlite3.
  3. Простейший пример использования.

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 08:36
by fps
IgorZ, этот ещё один способ вроде несколько про другое.
Вопрос был про изменение приглашения текущей сессии (не глобальное). Правка базы sqlite тут, насколько я понимаю, не поможет.

Вариант с использованием системной переменной меня устроил бы на 100%, если бы не описанное выше странное отображение пустых значений.

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 09:06
by Shmuel
Покуда "фича" со вставкой имени переменной окружения существует, вы можете использовать компромиссный вариант, например:

1. Все ваши приглашения должны иметь в конце символ > (обозначаемый как $g.
2. Все варианты данной переменной окружения должны иметь в конце $g.
3. Для того варианта, когда переменная у вас сейчас пустая, она будет содержать только $g.

Это только пример-иллюстрация, его можно модифицировать с учётом ваших требований (которые мне в полном объёме не известны).

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 09:38
by DrKnS
fps wrote:
Fri 20 Jul, 2018 08:36
странное отображение пустых значений
Чем оно странное?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724265.aspx wrote:If the name is not found, the %variableName% portion is left unexpanded.

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 09:56
by Shmuel
DrKnS, "not found" это не то же самое, что переменная окружения, значение которой равно пустой строке.
fps wrote:
Wed 18 Jul, 2018 03:19
Но в случае, когда myvar имеет пустое значение, FAR вставляет в приглашение её название, а не значение.

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 10:45
by DrKnS
Shmuel, спасибо, я как бы в курсе.

На всякий случай:
set foo=bar - присвоить переменной foo значение bar
set foo= - удалить переменную foo
lua:win.SetEnv("foo", "") - присвоить переменной foo пустое значение.

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 11:08
by fps
DrKnS wrote:
Fri 20 Jul, 2018 10:45
set foo= - удалить переменную foo
lua:win.SetEnv("foo", "") - присвоить переменной foo пустое значение.
Странность на мой взгляд в том, что строка %foo% будет подставлена не только в первом но и во втором случае.
Наверное это поведение логично и как-то объяснимо, но ни в одном из известных мне языков при обращении к переменной мы не получаем ее имя в качестве её значения при условии если её значение равно пустой строке.
Я не могу представить себе реальной пользы от такого поведения (кроме как для отладки).

Как установить формат приглашения командной строки из макроса?

Posted: Fri 20 Jul, 2018 11:16
by Shmuel
fps wrote:
Fri 20 Jul, 2018 11:08
Странность на мой взгляд в том, что строка %foo% будет подставлена не только в первом но и во втором случае.
Нет, во втором случае всё будет правильно.
Другое дело, что Фар не сразу возьмёт новое значение.

После такого запуска Фар C:\Far3\far.exe "lua:win.SetEnv('myvar', win.GetEnv('myvar') or '')"
мы увидим %myvar% в приглашении, но если нажать Space Enter, %myvar% исчезнет и больше не появится.