Работа с консольными алиасами

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 11246
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

Работа с консольными алиасами

Post by John Doe » Sat 08 Mar, 2014 23:52

Ранняя тема об алиасах не содержит общей информации, поэтому размещу здесь это предисловие:

Основная функция данного скрипта — автозагрузка файла алиасов при старте фара, а также после каждой правки .

Дополнительные функции доступны через префикс командной строки alias:.
  • alias: [имя_алиаса] — открывает файл алиасов в редакторе, и предпринимает попытку найти нужный алиас (если указан).
    После закрытия редактора алиасы перезагружаются (при наличии изменений).
  • alias: /file [имя_файла] — (пере)загружает файл алиасов. Если файл не указан, то загружается основной.
  • alias: имя_алиаса=[значение] — позволяет создавать и удалять алиасы (если значение не указано).
    Созданные таким образом алиасы действительны только в текущей сессии фара, а чтобы сделать их постоянными необходимо внести их в файл алиасов.
Рекомендуется в первую очередь назначить алиас a=alias:, и в дальнейшем использовать именно его вместо полного префикса.
(см. этот и другие примеры в прилагаемом alias.sample.doskey)

Примечание:
  • Имя и путь к файлу алиасов можно переназначить изменяя опции в начале скрипта.
    Чтобы после каждого обновления скрипта не приходилось вручную восстанавливать изменённые значения опций рекомендуется использовать возможности cfgscript из пакета ScriptsBrowser.

Требуется FAR 3 build >=4324
Attachments
Alias.2.7z
(3.98 KiB) Downloaded 22 times
Last edited by John Doe on Mon 07 Aug, 2017 11:03, edited 1 time in total.

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

Re: Работа с консольными алиасами

Post by John Doe » Sat 08 Mar, 2014 23:59

Запланированы (и практическии реализованы) некоторые дополнительные функции.
Но для начала вот скрипт в первом приближении:
(Требуется FAR 3 build >=3821)

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Wed 14 May, 2014 11:02

Спасибо за классный скрипт! Столкнулся со следующей проблемой, иногда при запуске FAR появлялось сообщение «Исключительная ситуация» в заголовке вкладки ConEmu. И вылетал плагин «ConEmu Background». Чем больше была пауза в скрипте тем реже возникала эта ситуация.
Заменил ShellExecuteEx(...) на os.execute(...) ошибка пропала. Макросы DOSKEY работают. Какие преимущества ShellExecuteEx над os.execute?

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

Re: Работа с консольными алиасами

Post by John Doe » Wed 14 May, 2014 11:59

Для os.execute надо ещё предварительно конвертировать путь из UTF-8 в ANSI.
И если в пути присутствует что-то, не имеющее соответствия в ANSI, то будет ошибка.

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Wed 14 May, 2014 14:32

Это касается названий на кириллице?

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Wed 14 May, 2014 14:34

Ещё вопрос, для чего нужен таймаут в скрипте?

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

Re: Работа с консольными алиасами

Post by John Doe » Wed 14 May, 2014 14:38

Таймаут для того чтобы можно было разобрать сообщение. Для красоты.
GorDAn wrote:Это касается названий на кириллице?
С кириллицей проблем не будет, если в вашей системе Ansi это 1251

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Wed 14 May, 2014 14:50

Спасибо. А есть, какие ни будь предположения по поводу ошибки?

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

Re: Работа с консольными алиасами

Post by John Doe » Wed 14 May, 2014 14:54

Вероятно с плагином не всё хорошо.
Для интереса скачал свежий Conemu, но не смог воспроизвести проблему (может конечно от настроек зависит).

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Wed 14 May, 2014 15:02

В том и беда, что не всегда выскакивает. У меня тоже последний FAR и ConEmu. Повесил запуск FAR на макрос и запускаю подряд. На пятом шестом проявляется. Сейчас попробую на чистом профиле.
Ещё помучаю :) Можно ли выводить сообщения скрипта в консоль?

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Wed 14 May, 2014 15:19

Ошибка воспроизводится только когда включён плагин ConEmu Background.

Code: Select all


   ╔═══════════ ConEmu Background ════════════╗
   ║                                          ║
   ║ [x] Плагин включен                       ║
   ║                                          ║
   ║ Путь к файлу настроек (Background.xml)   ║
   ║ Background.xml                           ║
   ║ [ ] Следить за изменениями xml-файла     ║
   ╟──────────────────────────────────────────╢
   ║            { OK } [ Отмена ]             ║
   ╚══════════════════════════════════════════╝


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

Re: Работа с консольными алиасами

Post by John Doe » Thu 15 May, 2014 07:27

(На моей старой машине) видно невооружённым взлядом, что при использованиии os.execute фон мигает несколько раз, а при использовании ShellExecuteEx только раз.
Необязательно даже смотреть исходники, очевидно что os.execute вместо вызова ShellExecuteEx выполняет какие-то действия (вызов C-функции "system", msvcrt.dll).

Мне так и не удалось воспроизвести ошибку. Рекомендую обратится на багтрекер Conemu, а скрипт попробуйте упростить до минимального (например оставьте только вызовы ShellExecuteEx).

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Thu 15 May, 2014 11:58

John Doe wrote:... Рекомендую обратится на багтрекер Conemu ...
Пока ошибку точно не определю, смысла нет обращаться. Возможно это из за Windows, у меня 8.1 x64.

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

Re: Работа с консольными алиасами

Post by John Doe » Thu 15 May, 2014 12:09

Как по мне, то os.execute вполне приемлемый вариант.
Или можно ShellExecuteEx заменить на CreateProcessW, но уж больно громоздко выходит.

P.S.
Честно говоря, сперва я реализовал всё самым что ни на есть "правильным" образом, используя AddConsoleAliasW (и прочие связанные функции этого семейства).
Затем всё выкинул, т.к. тупой вызов doskey позволил сократить код ровно в 3 раза.

GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn » Thu 15 May, 2014 15:33

Хотел сообщение вывести не в окно, а в консоль. Чтобы после загрузки было примерно так...

Code: Select all

Far Manager, version 3.0 (build 3901) x64
Copyright © 1996-2000 Eugene Roshal, Copyright © 2000-2014 Far Group
Console aliases loading... Ok
Это можно скриптом сделать?

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

Re: Работа с консольными алиасами

Post by John Doe » Thu 15 May, 2014 16:02

Теоретически да, но не так просто. А что это даст вам?

Post Reply

Return to “Полезные макросы и скрипты”