Поскольку великий Тotal Сommander предусмотрел возможность обмена кнопками панели инструментов, опишу в этой в этой статье цели создания кнопок панели инструментов Total Commander (далее просто кнопок), ее основы и принцип.
Итак, начнём.
Целью написания кнопок является еще большая автоматизация при управлении таким мощным инструментом работы с файлами, как TC. И все это при отсутствии необходимости помнить массу параметров для каждой исполняемой команды. Также хочу отметить, что именно кнопки позволяют комфортно работать, то есть выполнять различные команды с массой заранее сохранённых параметров, используя визуальный стиль определения и выполнения команд. То есть, если вы записали на рабочую панель инструментов необходимые вам повседневно кнопки, потратив некоторые усилия для этого или просто скопировав их отсюда и отредактировав по своему усмотрению и надобности, что тоже является, в некотором роде, усилием )), то, в дальнейшем, вы можете пользоваться вашим набором кнопок как макросами, которые всегда под рукой, выполняя различные сложные задачи с максимальной скоростью.
Для простоты и удобства указания относительного пути к объекту предлагаю ввести некую условную переменную %pp%. Эта переменная никоим образом не относится к системным переменным или внутренним переменным Total Commander. Повторю, она будет использоваться только в настоящем форуме для простоты и удобства указания относительного пути к объекту.
Во избежание последующей неразберихи, для создания кнопок желательно придерживаться следующего сценария:
1. Краткое описание кнопки; — если кнопка создаётся для операционных систем семейства win9x(Me), здесь же необходимо это указать, то есть пишем после описания (win9x); — если операционная система не указана, то считается, что кнопка написана для операционных систем семейства WINNT;
2. Код кнопки; можно вставлять в пост как Код: , выделив нужный фрагмент и нажав или блок, используя .
Блок удобен тем, что есть возможность непосредственно раскрашивать отдельные фрагменты кода кнопки для выделения необходимых участков кода, которым, по желанию, ниже можно дать описание.
Почему был выбран стиль обмена командами и параметрами именно через кнопки?
Ответ прост: кнопка панели управления ТС является наиболее информативным способом написания команд и параметров для ТС, содержащий помимо всего прочего еще и значки, таким образом получается, что из кнопки очень просто можно сделать команду, поместив ее, скажем, в:
— пользовательское меню (Запуск); недостаток: отсутствие значков выполняемых команд; достоинство: при необходимости впоследствии можно создать для команды комбинацию горячих клавиш (Shortcut); — избранные каталоги, можно использовать этот метод для создания простейших команд, таких как навигация и запуск приложений и файлов; недостаток: отсутствие типа запуска Свёрнуто
Как производить обмен кнопками?
— чтобы поделиться кнопкой, нажмите правой кнопкой мыши по вашей кнопке и выберите Копировать, после чего вставляйте содержимое буфера в пост как Код: или блок, и, при необходимости, отредактируйте код; — чтобы забрать кнопку, скопируйте содержимое кода нужной кнопки, правой кнопкой мыши щёлкните на нужном месте панели инструментов (кнопок) тотала и выберите Вставить;
Примечание:
— если, по каким-то причинам, значок вставленной кнопки не отображается или отображается не должным образом, необходимо обновить кнопку, для этого щёлкните по вставленной пустой или неверно отображаемой кнопке правой кнопкой мыши, выберите Изменить, после чего нажмите OK.
Пример выполнения внутренней команды:
Код:
TOTALCMD#BAR#DATA
2020
inetcpl.cpl,23
Синхронизация каталогов
2020
Список внутренних команд вы можете получить из файла TOTALCMD.INC
На вопрос
Почему вы используете номер внутренней команды, а не её интерпретацию?
Отвечу просто: Если использовать cm_FileSync вместо внутренней команды 2020, то при отсутствии файла TOTALCMD.INC кнопка не сработает. Вероятность этого мала, но существует.
Пример запуска внешнего приложения:
Код:
TOTALCMD#BAR#DATA
notepad
notepad.exe
Запуск блокнота
Возможно, вам будет интересен порядок строк кнопки:
1. Сигнатура 2. Команда 3. Параметры 4. Значок 5. Подсказка 6. Путь запуска 7. Тип запуска 8. Идентификатор команды
Рассмотрим подробнее каждую из них.
1. Сигнатура кнопки — константа, должна быть TOTALCMD#BAR#DATA, регистр обязательно должен быть верхним.
2. Команда — запускаемая команда, переменная величина. Файлы, лежащие в папке программы, можно запускать, используя в этом поле внутреннюю переменную %commander_path%, как указано ниже
Код:
%commander_path%\[папка]\файл.exe
Если расширение исполняемого файла указано в %pathext%, то нет необходимости указывать его.* Проверить это можно, выполнив
Код:
cmd /s/k title Зарегистрированные типы исполняемых файлов... &echo%pathext%
Хочу отметить, что если путь к исполняемому файлу команды лежит в %path%, то отпадает необходимость в указании отрезка %path% в пути запуска к исполняемым файлам.*
Проверить это можно, выполнив
Код:
cmd /s/k title Зарегистрированные пути к исполняемым файлам... &echo%path%
Особо подчеркну, что если путь к файлам содержит один и более спец символов, приведённых ниже,
пробел & ( ) [ ] { } ^ = ; ! ' + , ` ~
не забывайте заключать его в кавычки.
3. Параметры. Величина переменная. Отмечу, что в этом поле надо быть внимательнее со следующими знаками
()
— группировка
! ~ -
— унарные операторы
* / %
— арифметические операторы
+ -
— арифметические операторы
<< >>
— двоичный сдвиг
&
— двоичное И
^
— двоичное исключающее ИЛИ
|
— двоичное ИЛИ
= *= /= %= += -=
— присвоение
&= ^= |= <<= >>=
— разделитель операторов
в некоторых случаях требуется их удваивать, иногда даже утраивать. Для экранирования этих символов пользуйтесь оператором ^ Пример:
Для успешного возвращения переменных в строке параметров необходимо удваивать символ %, то есть в строке параметров переменная, скажем, %tmp% должна принять вид %%tmp%%. Для отладки параметров используйте знак вопроса ?, который необходимо на время отладки поместить в самое начало поля параметров
Код:
?%1 %2 ...%n
Это позволит вам визуально выявлять ошибки в написании кнопки. На время отладки команд cmd целесообразно использовать вместо ключа /c ключ /k или добавить после всех параметров &pause
Внутренняя переменная %commander_drive% раскроется в путь диска, на котором расположен Total Commander. Это оказывается очень удобно, например, при работе с переносных устройств. Но есть и другой вариант: %commander_path%\.. , который позволит плясать от расположения самого тотала. Необходимость того или иного метода указания относительного пути выбирайте сами. ))
Также, путь к файлу конфигурации вы можете указывать относительный, используя переменную %commander_ini%. Если бы все плагинописатели это учли и внесли соответствующие поправки, это помогло бы добиться от Total Commander еще большей портативности.
Полный список внутренних параметров вы можете найти ниже.
4. Значок Очень важный элемент. Позволяет визуально определить назначение кнопки. Формат его таков:
Код:
%pp%\значок.номер
Файлом значка может быть не только иконка ico или их библиотека icl, но и любой другой файл, содержащий в ресурсах значки.
Если файл значка находится в папке программы, то есть %commander_path%\значок или %commander_path%\папка\значок, то нет необходимости указывать в поле значок отрезок пути, содержащий относительный путь к программе, то есть %commander_path%. Это же, с некоторым ограничением, относится и к папкам, лежащим в системе, то есть в %path%.*
Здесь есть одна особенность, если путь к значку лежит в %commander_path% и содержит пробел(ы), при этом вы отсекли этот самый %commander_path%, он не будет отображаться, для отображения значка заключите этот усечённый путь в кавычки.
Если расширение исполняемых файлов, как мы выяснили, указывать необязательно, то расширение значка (файла с ресурсами), если оно отсутствует в %pathext%, требуется указать.
Номер значка в коде кнопки может быть указан только при копировании То есть нельзя указать номер значка вводом с клавиатуры, например, так:
Код:
shell32.dll,2
На мой взгляд это является недостатком
5. Подсказка Очень помогает забывчивым людям определять нужную кнопку и в этом поле вам никто не запрещает указывать помимо подсказки команды еще и ее комбинацию горячих клавиш, разумеется, при наличии таковой, например, так
Упаковать... (Alt+F5)
6. Путь запуска Основное предназначение этого параметра, указание пути запуска команды. Если опустить данный параметр, то это будет равносильно тому, что команда выполняется в активной панели. Здесь действует тот принцип, что все основные утилиты системы расположены в %path%, отсюда и вытекает положение, что при работе с системными утилитами и вашими дополнительными утилитами, которые вы так или иначе добавили в %path% нет необходимости указывать этот самый %path%, проверить это можно выполнив специальную команду (см. выше). Для обычного запуска исполняемых файлов (без параметров), не расположенных в %path%, рекомендуется указывать полный (относительный или абсолютный) путь запуска в том случае, если по этому пути лежат дополнительные файлы для работы исполняемых файлов (например, библиотеки dll и т.п.), а также во избежание возможного захвата запускаемой программой объекта под курсором активной панели. В определении такого захвата вам поможет программа Unlocker.
7. Модификатор типа запуска Сразу хочу сказать, что здесь наибольшее значение имеет тип запуска команды Свёрнуто. При таком типе запуска команда будет выполняться свёрнуто и отдельным фоновым процессом, что не будет вам мешать продолжать дальнейшую работу в TC. Если вам всё-таки понадобится взглянуть на ход выполнения команды, то вы всегда сможете её развернуть, кликнув по соответствующему заголовку на панели задач.
Модификатор типа запуска может принимать следующие значения:
Код:
1 — для свёрнутого запуска команды
-1 — для развёрнутого запуска команды
0 — для нормального запуска команды
Поле модификатора типа запуска в кнопке можно опустить, * когда оно равно 0, то есть обычный запуск. При этом типе запуска в настройке кнопки не будет отмечен ни один флажок: ни Свёрнуто, ни Развёрнуто.
8. Идентификатор команды. Умышленно опускаю более подробное описание, т.к. в подавляющем большинстве случаев, эта строка теряет всякий смысл при написании кнопки. 8-ю строку можно смело отбрасывать. *
Итак, подводя итоги, можно сделать некоторые краткие выводы о красоте написания кнопок:
1. Если путь к запускаемому файлу лежит в %path%, участок пути, содержащий это самый %path%, можно смело отбросить. * 2. Если файл, указанный в поле команда, имеет расширение %pathext%, можно отбросить это расширение. * 3. Если тип запуска команды нормальный, то есть не Свёрнуто/Развёрнуто, то 7 строка кода кнопки перестает играть роль (равна 0) и можно смело отбросить * строки кода 7 и 8. 4. Можно очистить поле пути запуска (строка 6), если запускаемый объект находится в %path%. * 5. 8-я строка кода должна быть отброшена * в подавляющем большинстве случаев, так как не оказывает никакого влияния на передачу кода кнопки и, по этой причине, вы практически не найдете кнопку, написанную мной, в которой будет содержаться 8-я строка.
Совет: для отладки кода кнопки на предмет отбрасывания 6, 7 и 8 строк: — скопируйте код кнопки в сообщение — нажмите Просмотр — выделите код и заключите его в тег кода, используя . — нажмите Предпросмотр Теперь вам стало видно, чему равна строка 7. Если значение 7-й строки не равно 0 — отбрасывайте только 8-ю строку; * Если значение 7-й строки равно 0 — отбрасывайте строки 6, 7 и 8. * Примечание: удаление 6-й строки, в основном, связано с запуском команды именно в активной панели.
__________________________________
* — Если вы сомневаетесь в своей правоте и(или) работоспособности кнопки, не изменяйте и не удаляйте это значение.
Список внутренних параметров
Продублирую здесь список внутренних параметров, который всегда ближе располагается по F1:
? — в качестве первого параметра вызывает перед запуском команды диалоговое окно, содержащее указанные далее параметры, в котором можно изменить параметры запуска команды или вовсе прервать выполнение команды %P — возвращает текущий путь, включая обратную наклонную черту \ на конце %N — возвращает имя объекта под курсором %T — возвращает путь к соседней панели %M — возвращает имя объекта под курсором в соседней панели %O — возвращает имя объекта под курсором без расширения %E — возвращает расширение объекта под курсором (без предшествующей точки) %S — возвращает имена всех выделенных объектов, используя в качестве разделителя имён объектов пробел При этом, имена объектов, содержащих пробелы, будут взяты в кавычки. Например, %S10 возвратит имена не более, чем первых 10-ти выделенных объектов. Следует учитывать, что длина командной строки не может превышать 32767 символов (ограничение систем NT). Замечания: • %N и %M возвращают длинное имя, в то время как %n и %m возвращают имя объекта в формате DOS (8.3). %P и %T возвращают пути с длинными именами каталогов, а %p и %t — с короткими. (То же самое для %o, %e и %s.) • Если прописать %P, %p, %T или %t непосредственно перед %S или %s (без пробела между ними!), то к имени каждого выделенного объекта будет добавлен его путь. Пример: %P%S возвращает строку из всех выделенных объектов с полными путями, в качестве разделителя используется пробел. При этом, при неоходимости, каждый объект будет заключён в кавычки. %% вставка знака процента. %L, %l, %F, %f, %D, %d создаёт в каталоге %TEMP% временный файл, содержащий список имён выделенных объектов, и добавляет имя этого файла списка параметром в командную строку. Содержимое временного файла списка может быть 6-ти видов: %L — Длинные имена выделенных объектов, включая полный путь, например, c:\Program Files\Long name.exe. %l — (L в нижнем регистре) Короткие имена выделенных объектов, включая полный путь, например, C:\PROGRA~1\LONGNA~1.EXE. %F — Длинные имена выделенных объектов без пути, например, Long name.exe. %f — Короткие имена выделенных объектов без пути, например, LONGNA~1.EXE. %D — Короткие имена выделенных объектов, включая полный путь, но с использованием набора символов DOS для диакритических знаков. %d — Короткие имена выделенных объектов без пути, но с использованием набора символов DOS для диакритических знаков.
Только для диалога задания пользовательских команд: %A или %A0 Вставляет оставшуюся часть введённой командной строки. %A1..%A9 Вставляет, соответственно, параметры от первого до девятого. Пример: Пользовательская команда em_tc запускает totalcmd.exe с параметрами /L=%A1 /R=%A2 -> Командная строка em_tc c:\dir1 d:\dir2 будет преобразована в команду: totalcmd.exe /L=c:\dir1 /R=d:\dir2
В заключение приведу недостатки программы Total Commander в плане кнопок: — не растягивается диалог редактирования кнопок, а также, не запоминает свои размеры — невозможно создавать выпадающие меню из кнопок (устранено) — невозможно использовать более двух рядов кнопок (устранено) — отсутствует прокрутка кнопок при их переполнении на панели, и, как следствие, их "съедание" (отпадает из-за предыдущего фикса) — отсутствует пункт меню для конфигурации панели кнопок в контекстном меню любой кнопки — невозможно выделить всю строку параметров кнопки тройным щелчком левой кнопки мыши — невозможно напрямую указать значок кнопки вместе с его номером, используя системный формат, например: shell32.dll,13