Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Скрипты PowerPro - опыт новичка 
Author Message
Вахмурка



PostPosted: Sat Jun 18, 2005 19:56    Post subject: Скрипты PowerPro - опыт новичка Reply with quote

На создание скриптов меня вдохновила статья Григория Шуренкова 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 не существует, скрипт не делает ничего.
View user's profile Send private message Send e-mail Visit poster's website


Powered by phpBB © 2001, 2005 phpBB Group