Page 1 of 5

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

Posted: Sat 08 Mar, 2014 23:52
by John Doe
Ранняя тема об алиасах не содержит общей информации, поэтому размещу здесь это предисловие:

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

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

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

Требуется FAR 3 build >=4324

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

Posted: Sat 08 Mar, 2014 23:59
by John Doe
Запланированы (и практическии реализованы) некоторые дополнительные функции.
Но для начала вот скрипт в первом приближении:
(Требуется FAR 3 build >=3821)

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

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

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

Posted: Wed 14 May, 2014 11:59
by John Doe
Для os.execute надо ещё предварительно конвертировать путь из UTF-8 в ANSI.
И если в пути присутствует что-то, не имеющее соответствия в ANSI, то будет ошибка.

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

Posted: Wed 14 May, 2014 14:32
by GorDAn
Это касается названий на кириллице?

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

Posted: Wed 14 May, 2014 14:34
by GorDAn
Ещё вопрос, для чего нужен таймаут в скрипте?

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

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

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

Posted: Wed 14 May, 2014 14:50
by GorDAn
Спасибо. А есть, какие ни будь предположения по поводу ошибки?

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

Posted: Wed 14 May, 2014 14:54
by John Doe
Вероятно с плагином не всё хорошо.
Для интереса скачал свежий Conemu, но не смог воспроизвести проблему (может конечно от настроек зависит).

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

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

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

Posted: Wed 14 May, 2014 15:19
by GorDAn
Ошибка воспроизводится только когда включён плагин ConEmu Background.

Code: Select all


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


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

Posted: Thu 15 May, 2014 07:27
by John Doe
(На моей старой машине) видно невооружённым взлядом, что при использованиии os.execute фон мигает несколько раз, а при использовании ShellExecuteEx только раз.
Необязательно даже смотреть исходники, очевидно что os.execute вместо вызова ShellExecuteEx выполняет какие-то действия (вызов C-функции "system", msvcrt.dll).

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

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

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

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

Posted: Thu 15 May, 2014 12:09
by John Doe
Как по мне, то os.execute вполне приемлемый вариант.
Или можно ShellExecuteEx заменить на CreateProcessW, но уж больно громоздко выходит.

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

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

Posted: Thu 15 May, 2014 15:33
by GorDAn
Хотел сообщение вывести не в окно, а в консоль. Чтобы после загрузки было примерно так...

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
Это можно скриптом сделать?