Update 3: Подсказка по открытию файлов на редактирование через перетаскивание мышкой.
Update 2: Подсказка по открытию всех файлов только для чтения на редактирование.
Update 1: Добавлена поддержка открытия Unicode файлов.
Продолжаем настраивать Total Commander и превращать его в небольшое IDE. В этот раз подключим Notepad++ для открытия на редактирования выделенных в Total Commander файлов. Также можно подключить другие редакторы, но при условии, что они поддерживают открытие сессии редактирования по конфигурационному файлу, к примеру, так как это может делать Notepad++.

Предыдущие статьи по настройке Total Commander:
  1. Открытие окна консоли Windows любой разрядности с повышением прав (и без) до Администратора в текущей директории
Нам потребуется:
  1. Создать директорию на диске, где будут лежать внешние файлы адресуемые из Total Commander.
  2. Создать скрипт или скрипты на языке Windows Batch для запуска Notepad++ и создать/отредактировать файл или файлы конфигурации поместив всё в директорию из предыдущего пункта.
  3. Создать 2 кнопки на панели инструментов для открытия Notepad++ в новом окне и для добавления файлов в последний открытый Notepad++.

1. Создать директорию на диске, где будут лежать внешние файлы адресуемые из Total Commander.

Чтобы наши файлы не зависели от версии Total Commander, а также, от его расположения, следует создать независимую директорию. К примеру:
C:\Program Files\Total Commander Scripts
Здесь будут храниться скрипты, ярлыки, конфигурационные файлы и иконки для наших кнопок.
Если каталог C:\Program Files\Total Commander Scripts будет располагаться в другом месте, то следует далее везде подменить путь на тот который будет у вас.

2. Создать скрипт или скрипты на языке Windows Batch для запуска Notepad++ и создать/отредактировать файл или файлы конфигурации поместив всё в директорию из предыдущего пункта.

Для начала создадим или отредактируем файл конфигурации из которого наши скрипты будут загружать различные параметры. В данном случае нам нужно сохранить туда путь до установленного Notepad++.
Файл C:\Program Files\Total Commander Scripts\profile.vars:
EDITOR=c:\Program Files\Notepad++\notepad++.exe
Далее нам нужны скрипты из проекта contools. Нужно будет скопировать следующие скрипты отсюда:
Откуда:Куда:Назначение:
Tools/ToolAdaptors/vbs/call.vbs -> C:\Program Files\Total Commander Scripts\call.vbs Запуск скриптов без сокрытия окна консоли
Tools/ToolAdaptors/vbs/call_nowindow.vbs -> C:\Program Files\Total Commander Scripts\call_nowindow.vbs Запуск скриптов с сокрытием окна консоли
Tools/ToolAdaptors/totalcmd/__init__.bat -> C:\Program Files\Total Commander Scripts\__init__.bat Скрипт групповой инициализации скриптов из каталога
Tools/ToolAdaptors/totalcmd/loadvars.bat -> C:\Program Files\Total Commander Scripts\loadvars.bat Скрипт загрузки переменных окружения из внешнего файла
Tools/std/__init__.bat -> C:\Program Files\Total Commander Scripts\Tools\std\__init__.bat Скрипт групповой инициализации скриптов из каталога
Tools/std/allocate_temp_dir.bat -> C:\Program Files\Total Commander Scripts\Tools\std\allocate_temp_dir.bat Скрипт создания временной уникальной директории в каталоге временных файлов пользователя
Tools/std/free_temp_dir.bat -> C:\Program Files\Total Commander Scripts\Tools\std\free_temp_dir.bat Скрипт удаления временной уникальной директории и его содержимого в каталоге временных файлов пользователя
Tools/get_datetime.bat -> C:\Program Files\Total Commander Scripts\Tools\get_datetime.bat Скрипт получения текущей даты и времени
Tools/ToolAdaptors/totalcmd/notepad_edit_files.bat -> C:\Program Files\Total Commander Scripts\notepad_edit_files.bat Скрипт запуска блокнота с передачей списка редактируемых файлов через командную строку
Tools/ToolAdaptors/totalcmd/notepad_edit_files_by_list.bat -> C:\Program Files\Total Commander Scripts\notepad_edit_files_by_list.bat Скрипт запуска блокнота с передачей списка редактируемых файлов через внешний файл (обходит ограничение на максимальную длину командной строки)
Осталось создать файл конфигурации скриптов C:\Program Files\Total Commander Scripts\configure.user.bat:
И файл групповой инициализации скриптов проекта contoolsC:\Program Files\Total Commander Scripts\Tools\__init__.bat:
Проект contools предлагает свой способ установки скриптов для Total Commander в директорию пользователя через скрипт Tools/ToolAdaptors/totalcmd/configure.bat, но он здесь не рассматривается.

3. Создать 2 кнопки на панели инструментов для открытия Notepad++ в новом окне и для добавления файлов в уже открытый Notepad++.

Для этого в специальном диалогом окне Total Commander ввести следующие параметры для создания кнопки.
  1. Открытие Notepad++ в новом окне
  2. Command:call_nowindow.vbs
    Parameters:notepad_edit_files_by_list.bat -wait -npp -nosession -multiInst "%P" %L
    Start path:C:\Program Files\Total Commander Scripts\
    Icon file:c:\Program Files\Notepad++\notepad++.exe
    Icon:0
    Tooltip:Notepad++
  3. Добавление списка редактируемых файлов в последний открытый Notepad++
  4. Command:call_nowindow.vbs
    Parameters:notepad_edit_files_by_list.bat -wait -npp "%P" %L
    Start path:C:\Program Files\Total Commander Scripts\
    Icon file:c:\Program Files\Notepad++\notepad++.exe
    Icon:11
    Tooltip:Notepad++ append


В результате должны получиться следующие кнопки:
Кнопки для Notepad++

Если необходимо отладить запуск скриптов, то в параметрах кнопок можно поменять скрипт call_nowindow.vbs на call.vbs. Это позволит просматривать ошибки появляющиеся в консоли скрипта Windows Batch.
Update 1: Добавлена поддержка открытия Unicode файлов.
Notepad++ не поддерживает файл своей сессии в формате Unicode, но позволяет указывать пути в файле в формате Unicode Code Points (&#xNNNN;) В скрипт notepad_edit_files_by_list.bat была добавлена новая функциональность позволяющая преобразовать пути в данный формат. Скрипт стал работать медленнее, но теперь позволяет открывать файлы с названием в любой кодировке.
Чтобы воспользоваться новой функциональностью, нужно скачать следующие файлы:
Откуда:Куда:Назначение:
Tools/encoding/convert_hextbl_utf16le_to_u16cp.bat -> C:\Program Files\Total Commander Scripts\Tools\encoding\convert_hextbl_utf16le_to_u16cp.bat Скрипт конверсии из utf-16 LE представленной в виде hex-таблицы в файл из Unicode Code Points
И обновить параметры кнопок (изменения выделены):
  1. Открытие Notepad++ в новом окне
  2. Command:call_nowindow.vbs
    Parameters:notepad_edit_files_by_list.bat -wait -npp -nosession -paths_to_u16cp -multiInst "%P" %WL
    Start path:C:\Program Files\Total Commander Scripts\
    Icon file:c:\Program Files\Notepad++\notepad++.exe
    Icon:0
    Tooltip:Notepad++
  3. Добавление списка редактируемых файлов в последний открытый Notepad++
  4. Command:call_nowindow.vbs
    Parameters:notepad_edit_files_by_list.bat -wait -npp -paths_to_u16cp "%P" %WL
    Start path:C:\Program Files\Total Commander Scripts\
    Icon file:c:\Program Files\Notepad++\notepad++.exe
    Icon:11
    Tooltip:Notepad++ append

Update 2: Подсказка по открытию всех файлов только для чтения на редактирование.
Notepad++ не поддерживает редактирования файлов только для чтения без ручного снятия флага либо перед открытием файла, либо после открытия через само меню программы.
Чтобы как-то обойти это ограничение, можно установить Python дополнение поддерживающее запуск управляющих приложением скриптов из самого приложения, и добавить скрипт следующего содержания:
Этот скрипт позволит снять флаг только для чтения со всех открытых файлов.
Из недостатков подобных скриптов:
  • Скрипт не будет работать, если локализация приложения отлична от английского языка, поэтому будет необходимо отредактировать в скрипте правильные локализованные версии строк.
  • Скрипт работает медленно в случае большого количества открытых файлов.
  • Скрипт изменяет флаги для всех открытых файлов изменяя флаг состояния самих файлов до момента сохранения этих файлов, что может оказаться нежелательным.
Update 3: Подсказка по открытию файлов на редактирование через перетаскивание мышкой.
Также можно открыть выделенные файлы с помощью мышки перетащив их (Drag and Drop) из панели Total Commander в предварительно открытое окно Notepad++.
Этот способ также не без недостатков:
  • Выполняем только через действие перетаскивания мышкой и не автоматизируем.
  • Блокирует Total Commander в случае большого количества открываемых файлов (от нескольких сотен).
  • Требует два действия (открыть Notepad++ и перетащить, не сбросив выделение) вместо одного (просто выполнить скрипт).

Leave a Comment

Your email address will not be published. Required fields are marked *