SaveAndRun - запуск команд в редакторе

Здесь обсуждается всё, что касается макросов.
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

SaveAndRun - запуск команд в редакторе

Post by phidel »

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

Также есть возможность настроить и вызвать форматировщик для редактируемого файла.

Дано несколько примеров настроек для разных языков (lua, python, pascal, cmd, powershell, ahk, markdown).



Перекодировка вывода программы в случае необходимости решается через вызов внешней программы iconv (настраивается в макросе, рассматривать как fallback, поскольку большинство современных программ умеют выводить в UTF-8).

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

Скачать последнюю версию: https://github.com/elementiss/farmanager-dea





Подробнее в readme.
Last edited by phidel on Fri 02 May, 2025 12:35, edited 8 times in total.
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

phidel wrote: Sat 19 Apr, 2025 10:37 если в пути к редактируемому файлу есть кириллица, то она выводится клякозябрами,
А если chcp 65001
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

John Doe, а куда его вставить?
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

Запустить в командной строке
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

не помогает. Вот минимальный пример для воспроизведения, если кто-то захочет помочь - при нажатии в редакторе shift-enter начинаются проблемы с кодировкой

смысл в том, чтобы находясь в редакторе выполнить команду, не выходя из него. из командной строки естественно работает
Attachments
test.zip
(7.11 KiB) Downloaded 37 times
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

Вот такой вывод у меня: cmd выводит ????, а py - utf-8.

Code: Select all

╔══════════════════════════ Script Output ══════════════════════════╗
║    Script exited with code: 1                                     ║
║    C:\tmp\??????>chcp 65001                                       ║
║    Active code page: 65001                                        ║
║    C:\tmp\пример>py "C:\tmp\пример\test-with-error.py"            ║
║    Hello from python!                                             ║
║    Traceback (most recent call last):                             ║
║  1   File "C:\tmp\пример\test-with-error.py", line 4, in <module> ║
║        print(f"Sum: {x + z}")                                     ║
║                          ^                                        ║
║    NameError: name 'z' is not defined                             ║
╚══════════════════ Enter: Go to line, Esc: Close ══════════════════╝
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

у меня вываливается с ошибкой invalid UTF-8 code в строке gsub, gmatch
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

John Doe wrote: Sun 20 Apr, 2025 12:09 Вот такой вывод у меня: cmd выводит ????, а py - utf-8.
было бы приемлемо, но у меня так не работает
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

phidel wrote: Sun 20 Apr, 2025 12:43 у меня вываливается с ошибкой invalid UTF-8 code в строке gsub, gmatch
Чтобы не вываливалось можно проверить :isvalid().
phidel wrote: Sun 20 Apr, 2025 12:44 было бы приемлемо, но у меня так не работает
Что за ОС у вас?

Кстати ещё рекомендую set PYTHONUTF8=1, иначе вывод такой:

Code: Select all

1   File "C:\tmp\\u043f\u0440\u0438\u043c\u0435\u0440\test-with-error.py", line 4, in <module>
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

John Doe wrote: Sun 20 Apr, 2025 12:55 Что за ОС у вас?
Windows 11, русская.
Вообще можно избавиться от gsub, тогда рисует клякозябры и нотки в конце строк. В принципе, меня и так устраивает, экономит массу теледвижений, а папки можно и латиницей называть
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

phidel wrote: Sun 20 Apr, 2025 13:03 Windows 11, русская.
Проблема с pas, py, чем ещё?
Каждый случай отдельно надо рассматривать, но это точно не проблема piper.
И если кодировка заведомо Ansi, то перед дальнейшей обработкой её необходимо перекодировать с помощью соответствующих функций из win.*
phidel wrote: Sun 20 Apr, 2025 13:03 Вообще можно избавиться от gsub
Если речь о выводе на экран, и на этом всё, то может быть.
Но если так рассуждать, то и piper незачем: запуская скрипты из редактора вместо перехвата из вывода, можно предоставить им свободу выводить всё на экране "под панелями".
Другое дело, если вы хотите перехватить ошибку, чтобы позиционировать редактор на нужное место (для lua у меня есть специальные макросы - MacroCheck, LuaCheck).
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

John Doe wrote: Sun 20 Apr, 2025 13:11 можно предоставить им свободу выводить всё на экране "под панелями".
Кстати я сделал бы именно так.
А для позиционирования в редакторе (при ошибке) можно даже отдельный макрос, читающий вывод с экрана.
win.system кстати возвращает ExitCode.
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

спотыкаются на gsub: lua, python, pascal, powershell
ahk работает, так как имеет ключи для настройки кодировки вывода
cmd работает, так как в случае ошибки не выводит путь к исходному файлу
John Doe wrote: Sun 20 Apr, 2025 13:19 А для позиционирования в редакторе (при ошибке) можно даже отдельный макрос, читающий вывод с экрана.

Не совсем понял - а как мне прочитать текст ошибки - выйти из редактора?
Но в целом это не моя цель. Мне нужен универсальный инструмент: я работаю в редакторе фара (оказалось, что не могу найти ему замену для текстов и небольших скриптов - перепробовал десятки). По нажатию клавиши документ сохраняется и происходит некое действие - отправка в репозиторий, конвертация маркдаун в html и отображение результата в браузере и т.п. В случае ошибки хочу получить обратную связь прямо в редакторе, не прерывая полет мысли (когда надо много написать в краткие сроки, это сильно помогает). Если ошибки не было, меня вообще не волнует что там на фоне происходит.
Last edited by phidel on Sun 20 Apr, 2025 13:30, edited 1 time in total.
User avatar
phidel
Posts: 41
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 19 times

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by phidel »

John Doe wrote: Sun 20 Apr, 2025 13:11 точно не проблема piper.
да, пожалуй так. Спасибо за макрос и попытку помочь
User avatar
John Doe
Бюрократ
Posts: 14330
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 473 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

phidel wrote: Sun 20 Apr, 2025 13:29 а как мне прочитать текст ошибки - выйти из редактора?
Пользовательский экран доступен отовсюду через panel.GetUserScreen.
phidel wrote: Sun 20 Apr, 2025 13:29 Если ошибки не было, меня вообще не волнует что там на фоне происходит.
Тогда подход с piper предпочтительнее, всё верно.
Но piper тут тоже может быть избыточным: он даёт больше контроля над обработкой вывода, и возможность одновременно подать данные на стандартный ввод.
Если вы просто исполняете скрипт, то может быть достаточно обычного io.popen.
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Обсуждение макросов”