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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Tue 17 Jul, 2018 12:29

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

Как его получить нашел: Far.GetConfig("Cmdline.PromptFormat")
Но нет команды Far.SetConfig().
Last edited by HaRT on Tue 17 Jul, 2018 12:42, edited 1 time in total.
Reason: Убрано спец. оформление Темы (Значок)

Shmuel
Posts: 5479
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 20 times
Been thanked: 176 times

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

Post by Shmuel » Tue 17 Jul, 2018 13:37

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

Есть ещё одна важная причина - недокументированность большинства установок, что позволяет делать изменения и не бояться, что поломаются плагины/макросы.
Last edited by Shmuel on Tue 17 Jul, 2018 13:41, edited 1 time in total.

fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Tue 17 Jul, 2018 17:49

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

Shmuel
Posts: 5479
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 20 times
Been thanked: 176 times

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

Post by Shmuel » Tue 17 Jul, 2018 18:40

В cmd.exe есть команда prompt. Как сделать в Фаре - не знаю, может кто другой подскажет.

User avatar
DrKnS
Posts: 4891
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 159 times

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

Post by DrKnS » Tue 17 Jul, 2018 22:07

В промпте поддерживаются переменные окружения. Можно поставить туда какую-нибудь %myvar% и менять её динамически.

fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Wed 18 Jul, 2018 03:19

DrKnS, спасибо такой способ подошел бы. Но в случае, когда myvar имеет пустое значение, FAR вставляет в приглашение её название, а не значение.
Баг?

fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Wed 18 Jul, 2018 04:30

В заголовке окна так же - туда можно прописать %myvar%, но если переменная не задана, то в заголовок так и выведется "%myvar%".
Похоже что это поведение так и задумано. Для отладки возможно это и удобно.
Но как его предполагалось пользоваться?
На мой взгляд, нелогично, что в зависимости от значения переменной выводится то её значение, то её название.

fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Thu 19 Jul, 2018 04:38

Как-то можно настроить, чтобы пустое значение переменной тоже подставлялось в приглашение и/или заголовок окна?

IgorZ
Posts: 530
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 22 times

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

Post by IgorZ » Fri 20 Jul, 2018 07:34

На всякий случай укажу ещё один способ.
  1. Скачиваем и ставим sqlite3.dll.
  2. Скачиваем и ставим модуль ljsqlite3.
  3. Простейший пример использования.

fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Fri 20 Jul, 2018 08:36

IgorZ, этот ещё один способ вроде несколько про другое.
Вопрос был про изменение приглашения текущей сессии (не глобальное). Правка базы sqlite тут, насколько я понимаю, не поможет.

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

Shmuel
Posts: 5479
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 20 times
Been thanked: 176 times

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

Post by Shmuel » Fri 20 Jul, 2018 09:06

Покуда "фича" со вставкой имени переменной окружения существует, вы можете использовать компромиссный вариант, например:

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

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

User avatar
DrKnS
Posts: 4891
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 159 times

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

Post by DrKnS » Fri 20 Jul, 2018 09:38

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.

Shmuel
Posts: 5479
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 20 times
Been thanked: 176 times

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

Post by Shmuel » Fri 20 Jul, 2018 09:56

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

User avatar
DrKnS
Posts: 4891
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 159 times

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

Post by DrKnS » Fri 20 Jul, 2018 10:45

Shmuel, спасибо, я как бы в курсе.

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

fps
Posts: 195
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 14 times
Been thanked: 4 times

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

Post by fps » Fri 20 Jul, 2018 11:08

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

Shmuel
Posts: 5479
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 20 times
Been thanked: 176 times

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

Post by Shmuel » Fri 20 Jul, 2018 11:16

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% исчезнет и больше не появится.

Post Reply

Return to “Нужна помощь”