Макрос для "умного" перемещения по панели (Home/End)

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Макрос для "умного" перемещения по панели (Home/End)

Post by Alexey Samlyukov »

Хотелка: красивый макрос :) при перемещении по списку файлов по клавише Home прыгаем на первый файл (НЕ ПАПКУ!), при повторном нажатии - в начало панели. Для End - все наоборот.

Добавка:
но если находимся уже над папкой, то как обычно - по Home идем в начало панели.
User avatar
HaRT
Moderator
Posts: 10869
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: вопросы и хотелки.

Post by HaRT »

Alexey Samlyukov
Неплохая идея!
Программировать надо однако…
Кстати, тогда уж ShiftHome/ ShiftEnd тоже надо переопределять, а то получится неинтуитивно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: вопросы и хотелки.

Post by NightRoman »

Для тех (только), кто юзает PowerShellFar - если надо, скажите - сделаю, это вроде довольно просто.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: вопросы и хотелки.

Post by NightRoman »

В PowerShellFar это будет так
http://forum.farmanager.com/viewtopic.p ... 662#p32662
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: вопросы и хотелки.

Post by Alexey Samlyukov »

NightRoman спасибо за наводку (конечно за "на водку" было б лучше :))
Т.к. никто не откликнулся, пришлось самому взяться за перо...

Code: Select all

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\Home]
"Sequence"="%i=APanel.CurPos; $If (panelitem(0,%i,2) & 0x00000010) Home $Else %j=1; $While (%j<=APanel.ItemCount) $If (!(panelitem(0,%j,2) & 0x00000010)) $If (%j==%i) Home $Exit $Else $If (Panel.SetPosIdx(0,%j)==2 && panel.fexist(0,\"..\")) Home $Exit $Else $Exit $End $End $End %j=%j+1; $End $End"
"DisableOutput"=dword:00000001

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\End]
"Sequence"="%i=APanel.CurPos; $If (!(panelitem(0,%i,2) & 0x00000010)) End $Else %j=1; $While (%j<=APanel.ItemCount) $If (!(panelitem(0,%j,2) & 0x00000010)) $If (%j==%i) End $Exit $Else $If (Panel.SetPosIdx(0,%j)==2 && panel.fexist(0,\"..\")) End $Exit $Else $Exit $End $End $End %j=%j+1; $End $If (%j>APanel.ItemCount) End $End $End"
"DisableOutput"=dword:00000001
User avatar
HaRT
Moderator
Posts: 10869
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: вопросы и хотелки.

Post by HaRT »

Alexey Samlyukov wrote:никто не откликнулся
Ну не успели, не успели.

Раз просили красивые макросы, извольте:
Home

Code: Select all

%i = APanel.CurPos; %j = 1;
$While ( ( %j < %i ) && ( PanelItem ( ACTIVEPANEL, %j, PANELITEM_FILEATTR ) & FATTR_DIRECTORY ) )
  %j = %j + 1;
$End
$If ( %j < %i )
  $If ( 2 == Panel.SetPosIdx ( ACTIVEPANEL, %j ) && Panel.fExist ( ACTIVEPANEL, ".." ) )
    Up
  $End
$Else
  Home
$End
End

Code: Select all

%i = APanel.CurPos; %j = APanel.ItemCount;
$While ( ( %j > %i ) && ! ( PanelItem ( ACTIVEPANEL, %j, PANELITEM_FILEATTR ) & FATTR_DIRECTORY ) )
  %j = %j - 1;
$End
$If ( %j > %i )
  Panel.SetPosIdx ( ACTIVEPANEL, %j )
$Else
  End
$End 
Отличие по красивости — в меньшей длине кода и в использовании констант из "%FARHOME%\Addons\Macros\MacroConsts.reg" (из сборки 2358). Отличие по функциональности — в том, что End с папки перейдёт на последнюю папку, а не на первую не-папку. В режиме панели, когда папки не группируются в её начале, эти макросы делают ровно то, что заказано: позиционирование на первую не-папку и последнюю папку соответственно.

PS
HaRT wrote:“Трансляцию” предлагаю осуществлять посредством FMM 0.2.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

Re: вопросы и хотелки.

Post by [e]Bu$ter »

Вроде бы удобно, но привыкать всё равно нужно.

HaRT, спасибо!
User avatar
HaRT
Moderator
Posts: 10869
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: вопросы и хотелки.

Post by HaRT »

Эх, жаль только очень уж медленно это порой работает. :(
Фар есть инструмент, а не нянька. © 2009 DrKnS
eugene1287
Posts: 41
Joined: Sat 02 Oct, 2010 00:25

Re: Макрос для "умного" перемещения по панели (Home/End)

Post by eugene1287 »

upd для far3
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Макрос для "умного" перемещения по панели (Home/End)

Post by John Doe »

Чего-то не хватает
eugene1287
Posts: 41
Joined: Sat 02 Oct, 2010 00:25

Re: Макрос для "умного" перемещения по панели (Home/End)

Post by eugene1287 »

да, не работает с несортированой панелью.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Макрос для "умного" перемещения по панели (Home/End)

Post by John Doe »

Если делиться со всеми, то стоит привести полные определения макросов, а не фрагменты.
Что касается случая с несортированной панелью, то это легко обработать в condition
eugene1287
Posts: 41
Joined: Sat 02 Oct, 2010 00:25

Re: Макрос для "умного" перемещения по панели (Home/End)

Post by eugene1287 »

вот полный макрос
koshi
Posts: 19
Joined: Tue 20 Dec, 2011 23:34

Re: Макрос для "умного" перемещения по панели (Home/End)

Post by koshi »

Данная концепция немного ломает user experience для тех кто любит Home Enter вместо ctrl+PgUp для перехода наверх. Я себе придумал другое - Home переходит на первый файл если курсор уже находится в самом начале (на ".."), так как в такой ситуации (по умолчанию) нажатие Home бессмысленно. Во всех остальных случаях оно ведёт себя как обычно. В корневой папке не работает (еже ли отключены там две точки).


API немного другой, что нарыл. И вот до кучи:

срабатывет на последнем файле.
Post Reply

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