Вахмурка

|
Posted: Sat Jun 18, 2005 19:56 Post subject: Скрипты PowerPro - опыт новичка |
|
|
На создание скриптов меня вдохновила статья Григория Шуренкова aka Gregory "Скриптинг в Total Commander с помощью PowerPro" (http://mirror01.users.i.com.ua/~skorohod/pp_tc.html). Правда, некоторые из его скриптов у меня почему-то не работали. То ли виноваты нововведения версии 4.2 (он писал про 3.9), то ли у меня другие настройки - не знаю. Пришлось повозиться. Данные скрипты работают в TotalCommander 6.52 и PowerPro 4.2 при настройках по умолчанию.
Скрипты, скорее всего, несовершенны и знатокам покажутся убогими. Не стреляйте в пианиста - это мой первый опыт скриптинга. Работают - и слава Богу.
Скрипт 1. Клавиша F2
В старом добром Norton Commander, предшественнике Total Commander, клавише F2 соответствовала команда Menu. Если в текущей директории находился файл меню nc.mnu, то вызывался он (локальный), если нет - глобальный.
Gregory написал скрипт для TC, осуществляющий вызов локального меню (файл _local.bar, если он есть в текущей или в родительских директориях). Я внес усовершенствования - при нажатии на F2 происходит вызов локального меню, если таковое есть. В противном случае клавиша F2 сработает как обычно - cm_RereadSource.
Code: |
local path barpath
local hwnd=win.mainhandlefrompoint(xmouse,ymouse)
local tmp=clip.get
win.sendmessage(hwnd,0x400+51,2029,0)
path=clip.get
for (length(path)>1)
barpath=path++"\_local.bar"
if (validpath(barpath)) do
do("путь к TCmenu.exe",barpath)
break
else
path=file.folder(path)
win.sendmessage(hwnd,0x400+51,540,0)
endif
endfor
clip.set(tmp)
|
Примечания:
1. Вместо TCmenu можно использовать TCToolbar - кому что нравится.
2. Здесь и далее предполагается, что читатель умеет вызвать скрипт или повесить на него горячую клавишу. В противном случае - читайте статью Gregory или документацию к PowerPro.
3. Здесь и далее - работа скриптов не зависит ни от раскладки клавиатуры, ни от языка интерфейса ТС.
Скрипт 2. Поиск по шаблону одной кнопкой
Сложные критерии поиска файлов можно сохранить в виде шаблона и вызывать в случае необходимости. Для вызова поиска по нужному шаблону приходится нажимать очень много клавиш или многократно щелкать крысой:
1. Alt+F7 - вызвать окно поиска;
2. Load/Save - перейти на вкладку шаблонов;
3. Найти в списке нужный шаблон, у меня их всего 17, а вдруг сотня!
4. Load - загрузить шаблон;
5. Start search - начать поиск.
Мой скрипт тупо посылает необходимые клавиши активному окну. Если скрипт повешен на кнопку панели ТС, последний всегда является активным окном.
Code: |
*keys %{f7}+{tab}{right}{right}{right}{tab}{tab}{туда-сюда}{enter}{enter}
|
Примечания:
1. Вместо {туда-сюда} вставляется необходимая комбинация клавиш {down}, {up}, {end} и {home} - в зависимости от конкретного набора шаблонов.
2. Рекомендуется сделать так: шаблон, которым приходится пользоваться часто, должен начинаться с буквы z (например, у меня шаблон "файлы, одинаковые по объему и содержимому" называется zDuplicates), и тогда этот шаблон попадает в конец списка. Тогда {туда-сюда} будет выглядеть как {end} и, возможно, несколько раз {up}. Кроме того, добавление новых или удаление старых шаблонов (если они не начинаются с z) не повлияет на работу скрипта. С тем же успехом можно использовать русские буквы.
3. Разумеется, для каждого шаблона будет свой скрипт, отличающийся только составом {туда-сюда}.
Скрипты 3 и 4. Сохранение и восстановление текущих вкладок (tabs)
Мы долго и кропотливо создавали набор вкладок для определенной работы, но вот беда - временно потребовался совсем другой набор, а терять нажитое непосильным трудом не хочется. В ТС для этого надо:
1. Нажать правой кнопкой крысы на заголовке вкладки;
2. Выбрать "Save tabs to file";
3. Ввести имя (например, temp.tab);
4. Нажать Save.
Хочется сделать это одной кнопкой (одной клавишей или одним щелчком крысы). Будьте любезны:
Code: |
local hwnd=win.mainhandlefrompoint(xmouse,ymouse)
win.postmessage(hwnd,0x400+51,3009,0)
*keys {down}{down}{down}{down}{down}{down}{enter}1^{enter}
if (validpath("путь ко вкладкам\1.tab"))
*keys {right}{enter}
endif
|
Примечания:
1. "Путь ко вкладкам" соответствует ключу TabDir в файле WINCMD.INI. Впрочем, можно записать и другой путь, и вообще никакого. Но лучше подстраховаться.
2. Благодаря выбору имени "1" скрипт работает в любой раскладке клавиатуры.
3. Если файл 1.tab не существует, он будет создан, в противном случае - перезаписан.
Далее надо восстановить сохраненный набор вкладок, и вот тут нас, возможно, ждет засада. Дело в том, что меню операций со вкладками можно вызвать двумя способами: щелкнув правой кнопкой на любой вкладке или выполнив команду cm_DirTabsShowMenu. Но первое невозможно, если вкладок нет, а команда cm_DirTabsShowMenu не входит в стандартное меню (в расширенное от Panos Davitidis - входит). Но даже если меню вызвано (операция 1), придется сделать еще кое-что:
2. Выбрать "Load tabs from file, replace tabs";
3. Ввести имя (в нашем случае 1.tab);
4. Нажать Open.
А можно проще. Ниже приводится скрипт, который работает даже при отсутствии вкладок:
Code: |
if (validpath("путь ко вкладкам\1.tab")) do
local hwnd=win.mainhandlefrompoint(xmouse,ymouse)
win.postmessage(hwnd,0x400+51,3001,0)
win.postmessage(hwnd,0x400+51,3009,0)
keys {up}{up}{up}{up}{enter}1{down}^{enter}
win.postmessage(hwnd,0x400+51,3007,0)
endif
|
Примечания:
1. Разумеется, если файла 1.tab не существует, скрипт не делает ничего. |
|