Открытие блокнота Notepad++ из Total Commander со списком выделенных файлов на редактирование
Update 4: Добавлен отдельно скрипт запуска новой сессии Notepad++.
Update 3: Подсказка по открытию файлов на редактирование через перетаскивание мышкой.
Update 2: Подсказка по открытию всех файлов только для чтения на редактирование.
Update 1: Добавлена поддержка открытия Unicode файлов.
Продолжаем настраивать Total Commander и превращать его в небольшое IDE. В этот раз подключим Notepad++ для открытия на редактирования выделенных в Total Commander файлов. Также можно подключить другие редакторы, но при условии, что они поддерживают открытие сессии редактирования по конфигурационному файлу, к примеру, так как это может делать Notepad++.
Предыдущие статьи по настройке Total Commander: Нам потребуется:
Файл C:\Program Files\Total Commander Scripts\profile.vars:
В результате должны получиться следующие кнопки:
Update 2: Подсказка по открытию всех файлов только для чтения на редактирование.
Также можно открыть выделенные файлы с помощью мышки перетащив их (Drag and Drop) из панели Total Commander в предварительно открытое окно Notepad++.
Update 3: Подсказка по открытию файлов на редактирование через перетаскивание мышкой.
Update 2: Подсказка по открытию всех файлов только для чтения на редактирование.
Update 1: Добавлена поддержка открытия Unicode файлов.
Продолжаем настраивать Total Commander и превращать его в небольшое IDE. В этот раз подключим Notepad++ для открытия на редактирования выделенных в Total Commander файлов. Также можно подключить другие редакторы, но при условии, что они поддерживают открытие сессии редактирования по конфигурационному файлу, к примеру, так как это может делать Notepad++.
Предыдущие статьи по настройке Total Commander: Нам потребуется:
- Создать директорию на диске, где будут лежать внешние файлы адресуемые из Total Commander.
- Создать скрипт или скрипты на языке Windows Batch для запуска Notepad++ и создать/отредактировать файл или файлы конфигурации поместив всё в директорию из предыдущего пункта.
- Создать 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:
Далее нам нужны скрипты из проекта contools. Нужно будет скопировать следующие скрипты отсюда:NPP_EDITOR=c:\Program Files\Notepad++\notepad++.exe BASIC_TEXT_EDITOR=notepad.exe
Осталось создать файл конфигурации скриптов C:\Program Files\Total Commander Scripts\configure.user.bat:
Откуда: Куда: Назначение: 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_new_session.bat -> C:\Program Files\Total Commander Scripts\notepad_new_session.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 Скрипт запуска блокнота с передачей списка редактируемых файлов через внешний файл (обходит ограничение на максимальную длину командной строки)
И файл групповой инициализации скриптов проекта contools – C:\Program Files\Total Commander Scripts\Tools\__init__.bat:
123 @echo offset "CONTOOLS_ROOT_TO=C:\Program Files\Total Commander Scripts\Tools"
12345 @echo offif "%CONTOOLS_ROOT%" == "" set "CONTOOLS_ROOT=%~dp0"set "CONTOOLS_ROOT=%CONTOOLS_ROOT:\=/%"if "%CONTOOLS_ROOT:~-1%" == "/" set "CONTOOLS_ROOT=%CONTOOLS_ROOT:~0,-1%"
Проект contools предлагает свой способ установки скриптов для Total Commander в директорию пользователя через скрипт Tools/ToolAdaptors/totalcmd/configure.bat, но он здесь не рассматривается.
3. Создать 2 кнопки на панели инструментов для открытия Notepad++ в новом окне и для добавления файлов в уже открытый Notepad++.
Для этого в специальном диалогом окне Total Commander ввести следующие параметры для создания кнопки.- Открытие новой сессии Notepad++
- Открытие редактируемых файлов в новом окне Notepad++
- Добавление списка редактируемых файлов в последнее открытое окно Notepad++
Command: call_nowindow.vbs Parameters: notepad_new_session.bat -wait -npp -multiInst "%P" Start path: C:\Program Files\Total Commander Scripts\ Icon file: c:\Program Files\Notepad++\notepad++.exe Icon: 2 Tooltip: Notepad++
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++
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
В результате должны получиться следующие кнопки:

Если необходимо отладить запуск скриптов, то в параметрах кнопок можно поменять скрипт 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
- Открытие редактируемых файлов в новом окне Notepad++
- Добавление списка редактируемых файлов в последнее открытое окно Notepad++
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++
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 дополнение поддерживающее запуск управляющих приложением скриптов из самого приложения, и добавить скрипт следующего содержания:
Этот скрипт позволит снять флаг только для чтения со всех открытых файлов.
123 for f in notepad.getFiles():notepad.activateFile(f[0])notepad.runMenuCommand('Edit', 'Clear Read-Only Flag')
Из недостатков подобных скриптов:Update 3: Подсказка по открытию файлов на редактирование через перетаскивание мышкой.
- Скрипт не будет работать, если локализация приложения отлична от английского языка, поэтому будет необходимо отредактировать в скрипте правильные локализованные версии строк.
- Скрипт работает медленно в случае большого количества открытых файлов.
- Скрипт изменяет флаги для всех открытых файлов изменяя флаг состояния самих файлов до момента сохранения этих файлов, что может оказаться нежелательным.
Также можно открыть выделенные файлы с помощью мышки перетащив их (Drag and Drop) из панели Total Commander в предварительно открытое окно Notepad++.
Этот способ также не без недостатков:
- Выполняем только через действие перетаскивания мышкой и не автоматизируем.
- Блокирует Total Commander в случае большого количества открываемых файлов (от нескольких сотен).
- Требует два действия (открыть Notepad++ и перетащить, не сбросив выделение) вместо одного (просто выполнить скрипт).