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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

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



Основная функция данного скрипта — автозагрузка файла алиасов при старте фара, а также после каждой правки файла
  • По умолчанию в качестве файла алиасов используется alias.doskey, который должен быть расположен рядом со скриптом.
  • Кодировка файла: OEM или UTF-8 (c BOM).
  • Формат файла: типичный ini-файл, разбитый на секции вида [far.exe], [cmd.exe].

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

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

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

Скачать: https://github.com/FarManagerLegacy/Alias
Last edited by John Doe on Mon 07 Aug, 2017 11:03, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4564
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

John Doe wrote: Mon 31 Mar, 2025 16:44 Вы осознаёте что направляете человека в кроличью нору?
Мне бы попроще… Не догоняю.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 31 Mar, 2025 17:06 увы, не всегда показывает :-(
Обе команды в этом едины, работают только если описания отображены на панелях..
buniak_a_h wrote: Mon 31 Mar, 2025 17:07 Не догоняю.
Параметры как разделять, с учётом кавычек.
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

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

Post by phidel »

John Doe wrote: Mon 31 Mar, 2025 16:52 Впрочем, есть простой путь:
ren=tcc /c ren
У меня описания в кодировке UTF-8, и первый и второй инструмент описание скопировали, но испортили кодировку.
John Doe wrote: Mon 31 Mar, 2025 16:44 Надо программно установить курсор, вызвать диалог по ShiftF6, ввести имя и Enter.
Учитывая, что только far знает, как называется файл с описаниями и в какой он кодировке, прихожу к выводу, что это единственно правильный способ, при условии что нет функции переименования файла в апи фара.
John Doe wrote: Mon 31 Mar, 2025 16:44 Это элементарно, если вас устроит, что аргументы придётся заключать в кавычки всегда, и разделять между собой запятой.
Нет, не устроит, буду парсить строку

Как вариант можно написать аналогичную утилитку командной строки для переименования файлов с поддержкой описаний и их кодировок, но хотелось кошерно, через апи фара.

У меня есть собственноручно писанная утилита для редактирования многострочных описаний, на паскале, но она привязана к кодировке UTF8 и названию ''Descript.ion''. Даже умеет отображать картинки. Если кому-то интересно могу выложить.
Last edited by phidel on Mon 31 Mar, 2025 18:28, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

phidel wrote: Mon 31 Mar, 2025 18:26 и первый и второй инструмент описание скопировали, но испортили кодировку.
Проверил. После chcp 65001 оно почти работает. Обрезает последние 3 байта, и если кому не пофиг, то можно зарепортить, наверно исправят.
phidel wrote: Mon 31 Mar, 2025 18:26 Нет, не устроит, буду парсить строку
Есть в принципе готовый Luashell
Если без него, то SplitCommandLine / CommandLineToArgv viewtopic.php?p=145800#p145800
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

phidel wrote: Mon 31 Mar, 2025 18:26 У меня есть собственноручно писанная утилита для редактирования многострочных описаний, на паскале, но она привязана к кодировке UTF8 и названию ''Descript.ion''. Даже умеет отображать картинки. Если кому-то интересно могу выложить.
Почему бы и нет, есть же https://plugring.farmanager.com/plugin.php?pid=721
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

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

Post by phidel »

Вот такое получилось. В написании макросов опыта нет, прошу критиковать.
Переименование / копирование файла из командной строки с сохранением описания файла.
Если файл был переименован по ошибке, можно откатить переименование.

Иногда вместо ShiftF5 случайно нажимаю ShiftF6 и потом долго думаю, куда делся файл и как он раньше назывался. Очень не хватало такой функции отката.

Алиасы ren (он же кут чтобы не переключать раскладку), renundo и cp (он же сз)

Еще раз благодарю за макрос для работы с алиасами, даже обидно, что сам не додумался. Все батники мигрировали в алиасы, как и часть пунктов пользовательского меню, все в одном месте, организовано. Работа ускорилась раза в два за счет быстрого набора и выполнения команд, без мельтешения диалоговых окон.
Attachments
dea_rename_file_2025-04-01.zip
(4.27 KiB) Downloaded 63 times
Last edited by phidel on Tue 01 Apr, 2025 01:37, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4564
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

phidel wrote: Tue 01 Apr, 2025 01:33 прошу критиковать.
Первые впечатления:
  1. Не очень понял следующий текст:

    Code: Select all

    function SplitCmd(fullLine)
    end
    -- когда запускается из doskey, это будет один строковый аргумент, содержащий имена двух файлов
    local fullLine = ...
    local file1, file2 = SplitCmd(fullLine)   -- третий и последущие параметры игнорируем
    
    Судя по названиям - разбор комстроки, но ф-ция SplitCmd - пустышка.
  2. Там же. Если надо разобрать переданные параметры, то обратите внимание на функцию LUA select:
    select (index, ···)
    Если index - число, возвращает все параметры после параметра с номером index. В противном случае, index должен быть строкой "#", в этом случае select возвращает общее количество параметров (исключая index, примечание переводчика).
Last edited by buniak_a_h on Tue 01 Apr, 2025 09:01, edited 1 time in total.
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

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

Post by phidel »

buniak_a_h wrote: Tue 01 Apr, 2025 08:59 Судя по названиям - разбор комстроки, но ф-ция SplitCmd - пустышка.
В каком смысле пустышка? свою работу она делает, примеры приведены в описании макроса. Видимо, вы не запускали макрос, чтобы убедиться в его работоспособности
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

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

Post by phidel »

Не понимаю, откуда doskey знает про префиксы фара и умеет их исполнять. Ведь в батниках (.cmd) префиксы не работают. Можете пояснить, как в таком случае работает скрипт alias.lua, ведь он вызывает системную функцию AddConsoleAliasW?
User avatar
buniak_a_h
Posts: 4564
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

phidel wrote: Tue 01 Apr, 2025 11:33 В каком смысле пустышка?
Сорри, у меня "внутренность" функции была спрятана.
Всё же гляньте select:

Code: Select all

local file1, file2 = select(...,1) or '', select(...,2) or ''
Last edited by buniak_a_h on Tue 01 Apr, 2025 14:28, edited 3 times in total.
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

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

Post by phidel »

buniak_a_h wrote: Tue 01 Apr, 2025 14:22 Всё же гляньте select:
спасибо за участие, но это не мой случай
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

phidel wrote: Tue 01 Apr, 2025 14:46 Не понимаю, откуда doskey знает про префиксы фара и умеет их исполнять
Ниоткуда. Фар сам раскрывает алиасы.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Вывести лог изменений фара по сравнению с заданным билдом (используется gh).

Code: Select all

logsince=gh api "repos/FarGroup/FarManager/compare/builds/3.0.$*...HEAD"  --jq ".commits[].commit | \"-\"*45, ([.author.date, .author.name] |@tsv), .message, """""
Вызов: logsince 6457
Вывод:

Можно автоматизировать, чтобы выводил изменения по сравнению с запущенным фаром:

Code: Select all

log=lua:Far.DisableHistory(1);mf.print("logsince "..select(4,actl.GetFarManagerVersion(true)));Keys"Enter"
https://t.me/FarManager — Telegram чат
gotar
Posts: 519
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 31 times
Been thanked: 3 times

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

Post by gotar »

John Doe wrote: Mon 14 Apr, 2025 18:12 continue 6454:
Можно ли добавить номер версии Фар?
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

gotar wrote: Mon 14 Apr, 2025 23:06 Можно ли добавить номер версии Фар?
Через github апи не вижу простой возможности.
Локальный git - легко:

Code: Select all

git log builds/3.0.6457..HEAD --oneline --decorate
А ещё проще - в файле changelog смотреть.
Можно его diff получить:

Code: Select all

logsince=gh api "repos/FarGroup/FarManager/compare/builds/3.0.$*...HEAD" --jq ".files[] | select(.filename | contains(\"/changelog\")) | \"[7m\" + .filename + \"[0m\", .patch"
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

John Doe wrote: Mon 14 Apr, 2025 23:23 А ещё проще - в файле changelog смотреть.
Но хочется не проще, а умнее.
Однострочником в таком случае уже не обойтись:

Code: Select all

@echo off
set LOCAL_CHANGELOG=%FARHOME%\changelog
set REMOTE_URL=https://github.com/FarGroup/FarManager/raw/master/far/changelog
set CURL_EXE=curl.exe

for /F "usebackq skip=1 delims=" %%L in ("%LOCAL_CHANGELOG%") do (
  set stop_line=%%L
  goto :success
)
exit /b 1

:success
for /f "usebackq delims=" %%L in (`%CURL_EXE% -sSLr 0-99999 "%REMOTE_URL%"`) do (
    if "%%L"=="%stop_line%" goto :EOF
    echo %%L
)
А если байтики экономить, то вообще
https://t.me/FarManager — Telegram чат
Post Reply

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