Поиск по этому блогу

вторник, 4 августа 2015 г.

Настройка меню пользователя в Far Manager

В Far Manager есть так называемое "Меню пользователя" (перекочевавшее ещё из Norton Commander), которое вызывается по F2, и которое "предназначено для упрощения выполнения часто используемых операций" (цитата из встроенной справки).
В данный момент я использую это меню для двух основных типов операций:
  1. Быстрая навигация по файловой системе.
  2. Выполнение команд над выделенными файлами.
Для ускорения навигации по файловой системе я предлагаю добавить в пользовательское меню пункты, у которых в качестве команды указано"cd <путь-к-нужной-папке>".
Например, если создать пункт меню, у которого "Hot key" = "W", "Label" = "Go to Work", а "Commands" = "cd D:\Work", то при последовательном нажатии клавиш F2 и W, мы моментально попадаем в папку "D:\Work".
Аналогично если задать "Hot key" = "D", "Label" = "Go to My Documents", а "Commands" = "cd %userprofile%\Documents", то при последовательном нажатии клавиш F2 и D, мы переходим в папку "Мои документы".
Всё просто. Главное значение имеет удачный выбор горячих клавиш. Очень важно чтобы в голове была чёткая ассоциация между буквой (или цифрой), которая назначена в качестве горячей клавиши, и папкой, в которую нужно перейти. Это позволит не тратить лишнее время на размышления и для перехода в нужную папку потребуется нажатие всего двух-трёх клавиш.
Почему может понадобиться нажатие трёх клавиш? Иногда возникает такая ситуация: есть две папки, допустим "D:\Folder1" и "D:\Folder2". Их названия настолько созвучны, что так и хочется и той, и другой в качестве горячей клавиши назначить "F". Но двум командам назначить одну и ту же горячую клавишу нельзя (если честно, то можно, но срабатывать будет только одна из них). Данную задачу можно решить так: создаём подменю (нажимаем F2, затем Ins, выбираем пункт [Insert menu]), у которого "Hot key" = "F" и Label = "Go to Folder<N>", затем заходим в этом подменю и создаём в нём две команды - первая с "Hot key" = "1", "Label" = "Go to Folder1", "Commands" = "cd D:\Folder1", а вторая с "Hot key" = "2", "Label" = "Go to Folder2", "Commands" = "cd D:\Folder2". Теперь, нажимая последовательно F2, F, 1 мы переходим в папку "D:\Folder1", а нажимая F2, F, 2 - в папку "D:\Folder2".

Теперь о выполнении команд над выделенными файлами.
В качестве первого примера рассмотрим команду быстрого создания резервной копии файла (или нескольких файлов). Разумеется, можно воспользоваться встроенными в Far Manager возможностями по работе с архивами, т.е. нажать Shift+F1 и просто добавить выделенный файл в архив. Но мне хочется, чтобы имя файла архива автоматически строилось по шаблону "<дата-создания-архива><имя-архивируемого-файла><время-создания-архива>.7z". Для этого я  добавил пункт меню с "Hot key" = "+", "Label" = "Arc file !&", "Commands" = "D:\.scripts\arcfile.bat !&". Как видно, при выборе данного пункта меню вызывается bat-файл, которому в качестве параметров передаются имена выделенных файлов (они будут любезно подставлены Far Manager-ом вместо метасимволов "!&"). Содержимое файла arcfile.bat такое:
for /F "tokens=1,2,3 delims=." %%i in ("%DATE%") do set DATEARC=%%k-%%j-%%i
for /F "tokens=1,2 delims=," %%i in ("%TIME%") do set TIMEHHMMSS=%%i
for /F "tokens=1,2,3 delims=:" %%i in ("%TIMEHHMMSS%") do set TIMEARC=%%i%%j%%k
set TIMEARC=%TIMEARC: =0%

set ARCFILE="%DATEARC%-%~1.%TIMEARC%.7z"

"C:\Program Files (x86)\7-Zip\7z.exe" a %ARCFILE% %*
if ERRORLEVEL 1 pause
Большая часть этого bat-файла предназначена для генерацией имени результирующего архива, после чего вызывается архиватор 7z, который и делает всю работу. По окончанию работы 7z мы проверяем ERRORLEVEL (код ошибки), и если "что-то пошло не так", то останавливаемся по команде "pause".
Теперь если мы установим курсор на файл test.txt и последовательно нажмём F2 и +, то на выходе мы получим архив 2015-08-04-test.txt.202946.7z, в котором будет сохранена резервная копия файла test.txt.

В качестве второго примера рассмотрим команду вычисления md5-сумм выделенных файлов с сохранением результата в указанный файл. Добавляем пункт меню с "Hot key" = "5", "Label" = "md5sum !&", "Commands" = "md5sum !& > !?$Md5sumHistory$Enter md5-file name?(!.!).md5!". Команда выглядит достаточно громоздко, и на первый взгляд может вообще показаться, что это какой-то хаотический набор символов, но не всё так страшно. Разберём по порядку, слева направо: "md5sum !&" вычисляет md5-суммы выделенных в панели Far Manager файлов, затем с помощью символа ">" вывод этой команды перенаправляется в файл, имя которого задаётся конструкцией "!?$Md5sumHistory$Enter md5-file name?(!.!).md5!". Эта конструкция предназначена для вывода диалогового окна, в котором пользователь может указать имя файла, в котором он хочет сохранить md5-суммы. Формат этой конструкции такой "!?$<history>$<title>?<init>!". В <history> указывается произвольный уникальный символьный идентификатор, с которым будет связана история прошлых пользовательских вводов (в нашем случае это "Md5sumHistory"). В <title> указывается подсказка пользователю что от него требуется ("Enter md5-file name"). А в <init> указывается значение по умолчанию (в нашем случае, это "(!.!).md5", т.е. имя первого выделенного файла, к которому дополнительно добавлено расширение .md5). После того, как пользователь введет имя файла (или просто согласится с именем файла по умолчанию) Far Manager выполнит команду "md5sum !& > имя-файла-которое-указал-пользователь".
Т.о, если теперь установить курсор на файл test.txt и последовательно нажать F2, 5 и Enter, то на выходе мы получим файл test.txt.md5, в котором будет сохранена md5-сумма файла text.txt.

Более подробно узнать о возможностях "Меню  пользователя" в Far Manager, а также о существующих метасимволах, можно из встроенной справки, которую можно вызвать последовательно нажав F2 и F1.

Сайт Far Manager: http://farmanager.com/
Данный текст доступен по лицензии Creative Commons Attribution (CC BY)

3 комментария:

  1. Для ускорения навигации по файловой системе проще использовать предусмотренные Far-ом "Ссылки на папки", которые в меню "Команды". Один раз добавил, а потом через правый Ctrl+1 ... Ctrl+0 мгновенно переключаешься без всяких меню. Например на правый Ctrl+1 у меня всегда повешена папка загрузок.

    ОтветитьУдалить
  2. А можно фильтровать показ элементов меню в зависимости от выбранного в панели файла/каталога?

    ОтветитьУдалить
    Ответы
    1. Можно в любом каталоге создать "местное" меню в файле FarMenu.ini, которое будет открываться по F2 вместо "главного" меню. При этом можно будет переключаться между "местным" и "главным" меню по Shift-F2. Такой вариант не подойдёт?

      Удалить