Клавиша "пробел" как PgDn при просмотре текстовых

Здесь обсуждается всё, что касается макросов.
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Клавиша "пробел" как PgDn при просмотре текстовых

Post by DumKopf »

Заранее Sorry всем за тупое предложение.
Иногда приходится тупо сидеть часами перед монитором и читать с экрана. Палец, висящий над PgDn, затекает. Иногда промахивается. Хочу не глядя надавить на "пробел" свободно лежащей рукой, чтобы читать дальше (ну как в Opere или IE).
Ну а если еще сделать <Shift + Пробел> как PgUp, то это просто будет выше всех чаяний и надежд.
Результат эксперимента был отличным...
Отличным от ожидаемого.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Post by DiRTy_GaRRy »

DumKopf, макросы?
Ы?
User avatar
aquatiCat
Posts: 44
Joined: Wed 16 Mar, 2005 12:43
Contact:

Re: Клавиша "пробел" как PgDn при просмотре тексто

Post by aquatiCat »

Листаем вниз

Code: Select all

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\Space]
"DisableOutput"=dword:00000001
"Sequence"="$If (Eof) CtrlF10 Shift $If (APanel.Eof) $Exit $Else Add Home $End $Else PgDn $End"
Листаем вверх

Code: Select all

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\ShiftSpace]
"DisableOutput"=dword:00000001
"Sequence"="$If (Bof) CtrlF10 Shift $If (APanel.Bof) $Exit $Else Subtract End $End $Else PgUp $End"
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Post by DumKopf »

DiRTy_GaRRy
Намёк понял! - исправлюсь. (Чего-то я действительно затупил...)
Результат эксперимента был отличным...
Отличным от ожидаемого.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Post by DiRTy_GaRRy »

DumKopf, вот уж действительно не за что. Спасибо говори aquatiCat -- он готовые макросы дал. ;)
Ы?
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Post by DumKopf »

aquatiCat Жму руку - Thanks!

Немного потестировал макросы (в build 2039 и 2069, ОС - Win2000 Rus SP4).
Нашел один баг:
если файл в панели единственный -
- макрос Space работает, как задумано;
- макрос ShiftSpace закольцовывается (поднявшись к началу файла, перескакивает в конец).

И нашел одну багофичу:
если файлов в панели несколько -
- макрос Space, спустившись до конца текущего файла, переходит в начало следующего (не выходя из вьюера), и т.д. до конца последнего файла панели.
- макрос ShiftSpace, поднявшись до начала текущего файла, переходит в конец следующего (не выходя из вьюера) и т.д. до начала первого файла панели. Потом начинает работать баг - закольцовывается на первом файле панели.

Модератору: Вообще-то тему можно перенести в "Макросы"
Результат эксперимента был отличным...
Отличным от ожидаемого.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Post by DiRTy_GaRRy »

DumKopf, решение очень простое, если тебя не устраивают предложенные макросы -- напиши свои. :D Мало ли для чего человек писал эти самые макросы. ;)
Ы?
User avatar
aquatiCat
Posts: 44
Joined: Wed 16 Mar, 2005 12:43
Contact:

Post by aquatiCat »

DumKopf wrote:Нашел один баг:
если файл в панели единственный -
- макрос Space работает, как задумано;
- макрос ShiftSpace закольцовывается (поднявшись к началу файла, перескакивает в конец).
Странно. APanel.Bof не так что ли работает...
DumKopf wrote:И нашел одну багофичу:
если файлов в панели несколько
Это так и задумано :)
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Post by DumKopf »

DiRTy_GaRRy
Дык я сразу пропёр, что ты - горячий сторонник кружка "Умелые руки". Я сам, брат, из этих...

aquatiCat
> Странно. APanel.Bof не так что ли работает...

А, может, Bof.

Я для пробы обрезал всё, по самое "не могу", оставил лишь функционал:

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\ShiftSpace]
"DisableOutput"=dword:00000001
"Sequence"="PgUp $Exit"

Не закольцовывается.

> Это так и задумано
Круто. У меня было ощущение восторга, сходное с тем, когда в "UnReal" впервые включил режим Ghost и прошёл сквозь стену...
Last edited by DumKopf on Wed 15 Mar, 2006 14:16, edited 1 time in total.
Результат эксперимента был отличным...
Отличным от ожидаемого.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

DumKopf wrote:> Странно. APanel.Bof не так что ли работает...

Не. Это не так работает PgUp. Я для пробы обрезал всё, по самое "не могу", оставил лишь функционал:

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\ShiftSpace]
"DisableOutput"=dword:00000001
"Sequence"="PgUp $Exit"

Так та же песня - закольцовывается.
Так что вопрос к ФарТим - это чего же это делается, а?
В смысле закольцовывается?

По пунктам распиши что нужно сделать и что нажать...
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Post by DumKopf »

Skirda

Sorry - когда исправил макрос, не перезагрузил Far.
Сообщение выше поправил, наезд на ФарТим аннулируется с глубокими извинениями.
Результат эксперимента был отличным...
Отличным от ожидаемого.
User avatar
aquatiCat
Posts: 44
Joined: Wed 16 Mar, 2005 12:43
Contact:

Post by aquatiCat »

DumKopf wrote:Я для пробы обрезал всё, по самое "не могу", оставил лишь функционал
Попробуй самое простое:

Code: Select all

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\Space]
"DisableOutput"=dword:00000001
"Sequence"="$If (!Eof) PgDn $End"

Code: Select all

HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\ShiftSpace]
"DisableOutput"=dword:00000001
"Sequence"="$If (!Bof) PgUp $End"
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Post by DumKopf »

aquatiCat

> Попробуй самое простое:

IMHO, проверка на Eof и Bof в этих макросах излишня, поскольку генерируемые
клавиши PgDn и PgUp сами тут же проверяются на Eof и Bof внутренними
средствами Far.

Поэтому для моих нужд сгодится и ещё попроще (проще уже некуда):

Space:
"Sequence"="PgDn"

ShiftSpace:
"Sequence"="PgUp"

Всё это работает, так что - чего мне хотелось, я уже получил.

Другое дело, дико хочется, чтобы твои прикольные макросы не глючили.
Тут у меня накопились прикидки, отчего кольцует твой макрос.
Наблюдение первое: если файлы лежат на панели корневой папки, и отсутствуют
другие папки (типа как на дискете), то никакого кольцевания не происходит.
Наблюдение второе: если файлы записать в некорневую папку, ShiftSpace начинает
кольцевать, хватает присутствия на верхней строке панели родительской
папки (..).

На панели обычно все папки сверху, файлы все под ними.
Поэтому APanel.Eof честно возвращает True, когда Add спозиционирует
указатель на последнюю (нижнюю) строку панели. Как правило, на этой
последней строке валяется файл, поэтому твой макрос Space в большинстве
случаев не кольцует (хотя при сортировке по Ctrl-F7 можно получить и
папку на последней строке, и тогда он кольцует, как миленький).

Дело тут, наверно, в том, что для APanel.Eof (и APanel.Bof) пофигу, что
папка, что файл. APanel.Bof вернет True, только когда поднимется на
верхнюю строку панели. Но только вот Add и Subtract не перемещаются по папкам.
Если указатель стоит на верхнем файле, над которым - только папки,
Subtract игнорируется и идти вверх по папкам указатель не будет,
и соответственно, APanel.Bof будет всегда возвращать False, в ветке
$Else Subtract End
Subtract игнорируется, а End выполняется,
что и приводит к кольцеванию.

Вообще, я бы поправил в документации к макросам описания.

Для Apanel.Bof / PPanel.Bof вместо описания:
"текущий файл/каталог первый?"
дал бы что-то типа:
"текущий файл/каталог на верхней строке панели?"

Для Apanel.Eof / PPanel.Eof вместо описания:
"текущий файл/каталог последний?"
дал бы что-то типа:
"текущий файл/каталог на нижней строке панели?"

Это убрало бы неясность в понимании.

Теперь - чем это лечить.
Поскольку Add / Subtract по папкам не ходят, то в конце мы топчемся
на последнем / первом файле. Предлагаю использовать проверку
на имя текущего файла. Если имя файла в текущем выполнении макроса
совпадает с тем, что запомнено в предыдущем выполнении макроса, то
макрос прерывается.

Вот как выглядит мой вариант:

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\Space]
"DisableOutput"=dword:00000001
"Sequence"="%z=APanel.Current; $If (Eof) Add CtrlF10 Shift $If (%z==APanel.Current) $Exit $Else Home $End $Else PgDn $End"


REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Viewer\ShiftSpace]
"DisableOutput"=dword:00000001
"Sequence"="%z=APanel.Current; $If (Bof) Subtract CtrlF10 Shift $If (%z==APanel.Current) $Exit $Else End $End $Else PgUp $End"


Погонял в разных режимах, вроде не кольцует

------------------------------------------------
Да, и ещё надо помнить, что клавиша Space во вьюере задействована в поиске (для дальнейшего поиска), так что, повесив макрос на Space,мы это всё теряем ...
Результат эксперимента был отличным...
Отличным от ожидаемого.
DumKopf
Posts: 12
Joined: Tue 21 Jun, 2005 20:22
Location: Питер

Post by DumKopf »

Skirda

Так исторически сложилось, что в файловой панели у FARa могут одновременно
валяться в любом порядке и файлы, и подкаталоги, и надкаталог.
Исходя из вышеизложенных обстоятельств, решил я проверить, а что
возвращают Bof и Eof на файловых панелях.

Состряпал парочку тестовых макросов:
-------------------------------------------
REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\ShiftSpace]
"Description"="Вверх по файловой панели"
"DisableOutput"=dword:00000001
"EmptyCommandLine"=dword:00000001
"Sequence"="Up %y=msgbox(\"Bof Eof:\",itoa(Bof,3)+\" \"+itoa(Eof,3),0);"

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\Space]
"Description"="Вниз по файловой панели"
"DisableOutput"=dword:00000001
"EmptyCommandLine"=dword:00000001
"Sequence"="Down %y=msgbox(\"Bof Eof:\",itoa(Bof,3)+\" \"+itoa(Eof,3),0);"

-------------------------------------------

Выяснилось, что описание Bof:
"текущий файл первый?"
означает:
"текущий файл/каталог на верхней строке панели?"
а вовсе не:
"текущий файл самый верхний из всех файлов панели?"

Так же и описание Eof:
"текущий файл последний?"
означает:
"текущий файл/каталог на нижней строке панели?"
а вовсе не:
"текущий файл самый нижний из всех файлов панели?"

Я понимаю, что бритва Оккама здесь остра, как нигде, но всё же
- может быть, ФарТим создаст несколько новых сущностей типа:

Bf (Beginning file) - "текущий файл самый верхний из всех файлов панели?
(имеет наименьший номер строки, но необязательно=1)"
Ef (Ending file) - "текущий файл самый нижний из всех файлов панели?
(имеет наибольший номер строки, но необязательно=последнему)"
Bd (Beginning directory) - "текущая папка самая верхняя из всех папок панели?
(имеет наименьший номер строки, но необязательно=1)"
Ed (Ending directory) - "текущая папка самая нижняя из всех папок панели?
(имеет наибольший номер строки, но необязательно=последнему)"

и с тем же смыслом добавить в раздел "Проверка состояний панели":
APanel.Bf
PPanel.Bf
APanel.Ef
PPanel.Ef
APanel.Bd
PPanel.Bd
APanel.Ed
PPanel.Ed


Отдельный вопрос для размышлений - учитывать ли при поиске Min/Max в списке папок
родительскую папку (она же - надкаталог, она же - "..")? Если папка некорневая,
то в ней всегда присутствует родительская папка, и при любых режимах сортировки
она всегда занимает верхнюю строку. Но это ещё не повод навсегда присвоить ей титул
"Самая Верхняя Папка панели".
Last edited by DumKopf on Fri 17 Mar, 2006 13:17, edited 1 time in total.
Результат эксперимента был отличным...
Отличным от ожидаемого.
User avatar
aquatiCat
Posts: 44
Joined: Wed 16 Mar, 2005 12:43
Contact:

Post by aquatiCat »

DumKopf wrote:Я понимаю, что бритва Оккама здесь остра, как нигде, но всё же - может быть, ФарТим создаст несколько новых сущностей типа...
IMHO правильней просто исправить макродвижок так, чтобы APanel.Eof/Bof возвращали правильные значения по своему смыслу - последний/первый файл на панели вообще, причем желательно, чтобы Bof это делал без учета ".."
Post Reply

Return to “Обсуждение макросов”