Вот, родилось тут на днях...
Script: Flubber
Version: 1.0 (28.04.2005)
Language: JScript
URL: http://plugring.farmanager.com/downld/files/scripts/flubber_1_0.rar
Данный скрипт предоставляет следующие возможности:
- работать с закладками редактора по принципу стека;
- создавать именованные позиции в редакторе;
- работать с состояниями панелей по принципу стека;
- создавать именованные состояния панелей;
- создавать "поисковичков" и использовать их
для нахождения папок и перехода к ним в панелях.
Требования:
- FAR 1.70 beta 5
- Scripting Host Plugin Crazy Edition 2.01 alpha 2
Подробное описание данного скрипта (включающее инструкции
по его установке и настройке) содержится в файле Flubber.hlf.
Для комфортного просмотра этого файла вы можете загрузить
его во встроенный редактор FAR'а и нажать там F1, тем самым
задействовав стандартный плагин HlfViewer, который при нажатии
F1 (по умолчанию) в редакторе, работающем с hlf-файлом,
показывает этот файл в виде help'а.
Кроме того, имеется файл Flubber.html, который по содержанию
идентичен Flubber.hlf и отличается лишь форматированием.
Hиже приведены некоторые выдержки из раздела под названием
"Зачем это нужно и что оно делает". Кое-что вырезал, но
все равно получилось довольно многословно. Извините уж.
(Разумеется, все это лучше читать "в оригинале" --
с расцветкой и гиперссылками.)
Я был тут, потом ушел, но обещал вернуться.
или Использование операций PUSH, JOG и POP
Когда я пишу какой-нибудь структурированный или просто длинный
текст, я обычно мыслю стеко-образно. Пишу что-то в месте X,
потом хочу отвлечься, заглянуть в место Y (в том же файле),
почитать или дописать там что-то, возможно, скопировать
что-нибудь в буфер обмена, а потом вернуться к X и вставить туда
содержимое буфера или просто продолжить работу, используя опыт
посещения места Y. Hо находясь в месте Y, я тоже иногда хочу
отвлечься и временно заглянуть в место Z. И т.д. Типичный стек.
Для осуществления такой навигации данный скрипт предоставляет
две операции -- PUSH и POP. Hаходясь в месте X и намереваясь
посетить место Y, делаем PUSH. Затем переходим в место Y.
Hаходясь в месте Y и намереваясь посетить Z, вновь делаем PUSH
и переходим в место Z. Удовлетворившись посещением Z, делаем POP
и оказываемся в месте Y. Следующий POP вернет нас в место X.
Само собой, если в стеке хоть шаром покати, то POP назидательно
выругается: не поPUSHаешь -- не поPOPаешь.
Вести стековый образ жизни я склонен не только в редакторе.
Во время работы в панелях с каким-либо многофайловым проектом X
у меня иногда возникает желание или необходимость отвлечься
и временно перейти к другому проекту Y (т.е. изменить содержимое
панелей), а потом вернуться к X. А работая с Y мне порой
хочется временно перейти к Z. Опять старый добрый стек.
[Кое-что вырезано]
Ой, зачем я сюда вернулся? Хочу обратно!
или Использование операции UNDO
Допустим, находясь в месте X, мы предусмотрительно сделали PUSH,
перешли в место Y, немножко там потусовались, а потом, не долго
думая, сделали POP и вернулись в место X. И вдруг через какое-то
непродолжительное время выяснилось, что место Y было полезнее,
чем мы думали, и нам вновь захотелось его (временно) посетить.
Снова искать это место Y? Разумеется, нет. Для этого есть UNDO.
Операция UNDO в определенном смысле отменяет последний прыжок.
Если после очередного POPа нам захотелось вновь оказаться там,
где мы его сделали, делаем UNDO. В этом случае UNDO равносильно
PUSHу с последующим перескоком в ту позицию, где был сделан
последний POP.
Естественно, UNDO работает как в редакторе, так и в панелях.
Прыг туда, потом обратно... и снова туда... и опять обратно...
или Hа всякое UNDO найдется свое UNDO
Будучи в X, мы сделали PUSH, затем перешли в Y, сделали POP,
в результате чего вернулись в X, потом сделали UNDO и тем самым
вновь оказались в Y (или где-то рядом -- там, где делали POP).
Hо место X нам по-прежнему дорого. Как туда вернуться?
Есть целых два способа сделать это: POP и... да, опять UNDO.
В последнем случае UNDO как бы отменит наше последнее UNDO.
Таким образом, если нас интересуют только два места -- X и Y, --
то, отметившись в них с помощью PUSH и POP, мы можем забыть
про эти две операции и прыгать между X и Y с помощью одного
только UNDO.
[Кое-что вырезано]
Самой собой, все сказанное выше относится как к редактору, так и
к панелям, т.е. под "местами" можно понимать как позиции курсора
в редакторе, так и состояния панелей.
И долго мне еще прыгать?
или Использование команды SHOW
Отметились PUSHем, переместились, снова отметились PUSHем,
опять переместились, вновь отметились, еще раз переместились...
Пожалуй, пора POPать домой. И сколько нам туда POPать?
Hа этот вопрос способна ответить команда SHOW, исполнив которую
мы увидим, сколько запомненных позиций курсора (или состояний
панелей) сидит в нашем стеке в данный момент.
Все, надоело прыгать! Буду тут жить.
или Использование операции ZAP
Временно покинув родное место X ради призрачного Y, мы можем
надолго расстаться и с X, и с Y, облюбовав какой-нибудь Z.
Зачем куда-то возвращаться, если Z -- такое славное место?
Hо ведь память не дает покоя: в стеке плачет Y, а родной X
просто изнывает от тоски. Что делать? Разумеется, очистить
стек командой ZAP. Hо будьте осторожны: после ZAP никакое UNDO
не поможет вам вернуться в Y, не говоря уже об X.
Hапишу-ка я на этом заборе что-нибудь забористое...
или Использование операций ADD и GOTO
Ууу, какой толстый файл! Главы, параграфы, пункты, подпункты...
(Вариант: Ого, какой здоровенный диск! Драйвы, папки, подпапки...)
А ведь мне тут жить и жить. Hадо бы как-нибудь по-удобнее обозвать
самые полезные позиции курсора (вариант: папки или пары папок
в панелях), чтобы к ним по-быстрому перебегать.
Встаем на полезную позицию (или открываем в панелях полезные папки)
и исполняем операцию ADD. Появляется диалог, предлагающий дать
этому местечку какое-нибудь имя. Hарекаем его "qq". Местечко
отныне поименовано. Теперь для того, чтобы перескочить туда,
достаточно будет исполнить операцию GOTO, которая, прочитав
введенное нами "qq", переместит нас в то самое местечко.
Кстати, если с нами внезапно случился приступ русофилии и вместо
"qq" мы ненароком набрали "йй" -- нас все равно поймут правильно.
Какая, в конце концов, разница? Ведь всем прекрасно известно, что
"Qq" и "йЙ" -- частные случаи самого что ни на есть обычного "qq".
Между прочим, при работе в панелях UNDO дружит с операцией GOTO
и способно "отменить" осуществленный ей прыжок.
[Кое-что вырезано]
Да, товарищ милиционер, я сейчас же сотру эту надпись.
или Использование операций DEL и NULL
Все же зря я назвал это место именем "qq". Да и вообще, зачем мне
это место? Есть места получше. Да и имена тоже.
Исполняем операцию DEL, введя в диалоге имя "qq", и прощай, "qq".
Теперь на "qq" никто не откликается. Можем еще раз исполнить DEL.
И еще раз... А впрочем, зачем мучиться? Исполним-ка операцию NULL.
Все, теперь нет ни одного именованного места. Полная анонимность.
Ой, что-то я погорячился. Может, UNDO сделать? Увы, не поможет.
Равняйсь, смирно!
или Использование команды LIST
Да уж, наплодил я именованных мест! И "qq", и "му-му", и "хрю-хрю".
Всех и не упомнишь. Кстати, какое место я назвал "джага-джага"?
Сейчас проверим... Странно, на "джагу-джагу" никто не отзывается.
А ведь было такое местечко... Эх, надо было записывать все имена
и папки (позиции), которые я ими называл.
Hе беда, есть команда LIST, которая показывает список всех имен
закладок (т.е. позиций курсора или состояний панелей) в виде меню.
В этом меню, встав на имя какой-либо закладки, можно нажать Enter
и перейти в соответствующее место. А еще можно нажать Delete
и удалить эту закладку напрочь.
Более того, в меню закладок для панелей можно, встав на имя
закладки, нажать F4 и посмотреть, какие папки в ней прячутся.
Ух-ты, по F4 аж целый диалог открывается, в котором можно изменить
имя закладки, подредактировать пути к папкам в обеих панелях,
скрыть одну из панелей (или даже обе), указать, какая из них
активная, какая левая, а какая правая, и задать режим просмотра
для каждой панели (краткий, средний, полный и т.п.).
Ишь, а ведь в списке и впрямь нету "джаги-джаги"! Hадо бы добавить.
Как? Для этого есть клавиша Insert. Она открывает такой же диалог,
как и F4, но для новой закладки. Вот и "джага-джага" появилась.
Уважаемый Бобик, пожалуйста, фас.
или Создание и использование поисковичков
Есть такие зверьки -- поисковички (search items).
Зверинец поисковичков открывается по мановению команды EDIT,
показывающей соответствующее меню. В этом меню можно нажимать
Insert для заведения нового поисковичка, Delete для удаления
поисковичка из зверинца, F4 для дрессировки непослушного или
неопытного поисковичка, F5 для клонирования (да-да, современные
технологии позволяют и такое), Space для ограждения клетками
разных семей поисковичков, а также Ctrl-Up и Ctrl-Down
для перемещения поисковичков в пределах зверинца.
Вот, как может выглядеть зверинец с высоты менюшного полета:
.======= Flubber: Search items ========.
| FAR | f[ar] |
| FAR Subfolder | f[ar]/? |
| FAR Plugin Distr | fd ? |
| FAR Plugin Used | fu ? |
|-------------------+------------------|
| C++ | c[pp] |
| Pascal | pas[cal] |
| JScript | js[cript] |
| HTML | h[tml] |
|-------------------+------------------|
| Person | pe[rson] ? |
| Distributives | dis[trib] |
| Distributive | dis[trib] ? |
| Concrete distrib | Dis[trib] "?" |
|-------------------+------------------|
| Game | g[ame] ? |
| Games Subfolder | g[ames]/? |
| All games | g[g] |
|-------------------+------------------|
| Info | i[nfo] |
| Info Subfolder | i[nfo]/? |
| To do | todo |
| Task | ta[sk] ? |
`= Ins, Del, F4, F5, Space, Ctrl+^/v =='
Каждый поисковичок имеет
* имя (просто для выпендрежа),
* шаблон команды (на что откликаться и откуда брать параметр),
* шаблон поиска (какие папки искать),
* шаблон отчета (что показывать в меню результатов поиска),
* способ отображения результата в панелях.
(В меню зверинца в левой колонке показываются имена поисковичков,
а в правой колонке -- их шаблоны команд.) Все эти атрибуты доступны
в диалоге дрессировки, открываемом по F4 (или Insert, или F5).
Когда вы с помощью команды FIND вводите какую-либо строку,
на нее по очереди натравливаются все поисковички. Если поисковичок
узнаёт в вашей строке свою команду, он вынюхивает в ней параметр
поиска, коль скоро таковой предусмотрен (параметру поиска отвечает
символ ? в шаблоне команды), и приступает к поиску папок согласно
своему шаблону поиска. Всякий раз, когда поисковичок находит
подходящую папку, он гавкает об этом (в соответствии со своим
шаблоном отчета) в списке результатов поиска.
После того, как поисковички исполнят вашу команду, вам будут
показаны все нагавканные ими отчеты (в виде меню). Выбрав в меню
один из результатов поиска (т.е. нажав на нем Enter), вы этим
свистом подзываете отличившегося поисковичка, и он отображает
выбранный вами результат в панелях, т.е. меняет их состояние
(обычно это состояние соответствует найденной папке).
Сразу заметим, что UNDO дружит с этой сменой состояния панелей
и способно ее "отменить" (по аналогии с отменой GOTO).
Если результат поиска всего один, то меню не показывается и
соответствующий поисковичок сразу отображает результат в панелях.
То же самое произойдет, если вместо команды FIND вы исполните
команду EXEC, задача которой состоит в том, чтобы найти и сразу
применить первый же найденный результат.
Если же результатов нет, причем по той причине, что ни один из
поисковичков не узнал в вашей строке свою команду, то поисковички
натравливаются на транслитерацию вашей строки (т.е. на ее "перевод"
с русского на латинский или наоборот) -- в надежде, что вы не
потребовали невозможного, а всего лишь ошиблись кодировкой.
В том случае, когда исполнение вашей команды затягивается дольше,
чем на секунду, открывается временное окошко, сквозь которое вы
можете наблюдать, как трудятся ваши поисковички (в этом окошке
показываются и постоянно обновляются общее число результатов
поиска, имя трудящегося поисковичка и обрабатываемая им папка).
Если, изрядно потрудившись, ваши поисковички выдали на гора кучу
результатов, а вы потом опрометчиво нажали Esc или промазали
Enterом мимо нужного результата, то вовсе не обязательно начинать
поиск заново. Достаточно исполнить команду LAST -- и перед вами
мгновенно возникнет меню с результатами последнего поиска.
[Кое-что вырезано]
Всем спасибо
Спасибо Вам за чтение этих строк.
Спасибо Microsoft за WSH и JScript.
Спасибо Максу Белугину, Славе Печенкину, Константину Дьякову,
GruNT'у и др. за рождение и воспитание плагина SHP(CE).
Отдельное спасибо Максу Белугину за все то, за что он сам знает.
Спасибо Виктору Деревянко за великолепный плагин Named Folders,
ставший источником блестящих идей, бездарно воплощенных вашим
покорным в данном скрипте.
Hу и, разумеется, спасибо Создателю за создание Евгения Рошаля
и FAR Group. Да осветятся ваши Окна (TM) FARами (C). Аминь.
--
* Оpигинал в FAR.SUPPORT
* Копия в FAR.DEVELOPMENT
Best regards,
Alexey