RecentScreens — переключение между окнами как в MS Windows™

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

RecentScreens — переключение между окнами как в MS Windows™

Post by John Doe »

В большинстве приложений, которые я использую, переключение между окнами происходит в порядке их использования (MRU order).
Но не во всех, пример исключений: FAR manager, Google Chrome.
Для решения этой проблемы в фаре был когда-то такой плагинчик RecentScreens — меню «Экраны» в порядке использования

Вашему вниманию предлагается LuaMacro-реализация подобной функциональности.

Переключение окон-экранов по умолчанию заменяет LCtrlTab (только левый Ctrl).
В отличии от обычного переключения экранов — в процессе переключения может отображаться список окон (до тех пор, пока удерживается Ctrl).



Требуется FAR3 build 4096 или новее.
Attachments
RecentScreens_r3.9.7z
r3.9 work in progress
(5.13 KiB) Downloaded 317 times

User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: RecentScreens — переключение между окнами как в MS Windo

Post by t-rex »

Latest post of the previous page:

и то хорошо. но вообще при обработке этих эвентов не стоит выводить ничего интерактивного.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by John Doe »

t-rex wrote:но вообще при обработке этих эвентов не стоит выводить ничего интерактивного.
100%
Но это ведь не пользовательские сообщения, а ошибки.
Что например делать если far.AdvControl (F.ACTL_GETWINDOWINFO) не срабатывает?

Проблемы только при переходе через F6.

IgorZ
Posts: 690
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 63 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by IgorZ »

John Doe wrote:
IgorZ wrote:Отдельный хоткей лично мне был бы удобнее. Может, настройку вариантов поведения сделать, если будут и другие пожелания?
Есть хоткей для открытия меню - CtrlF12. Не оно?
Не совсем. Идеальное для меня поведение, выявленное экспериментально - по CtrlTab немедленное переключение по списку без вывода меню, а по CtrlCapsLock вывод меню с переключением после отпускания Ctrl. Сейчас я добился этого путём установки menuDelayDefault в -1 и добавления приведённый макрос трёх строчек (помечены в начале --[[!!]]).
John Doe wrote:Тогда выключите в настройках отображение списка, и добавьте ещё один макрос на отдельный хоткей (CtrlCapsLock)
  1. Macro { description="[RecentScreens] switch (show list)";
  2.   area=allScreens; key="/^LCtrl(Shift)?CapsLock$/";
  3.   action=function()
  4. --[[!!]]    local switchInstantoriginal = switchInstant
  5. --[[!!]]    switchInstant = false
  6.     local w = getWindow()
  7.     if w.Type==F.WTYPE_PANELS then Pop(makeUniqueId("Panels",0)) end
  8.     getWindowById:Init()
  9.     if band(w.Flags,F.WIF_MODAL) ~= 0 then showRecentScreens(1,"modal"); return end
  10.     local pos = new_pos(1,akey(1):gsub("CapsLock","Tab"))
  11.     stopMonitoring = true
  12.       pos = showRecentScreens(pos)
  13.       Pos = getWindowById[Screens[pos]].Pos
  14.       Pop(Screens[pos])
  15.       gotoWindow(Pos)
  16.     stopMonitoring = false
  17.     LockState("Caps",0)
  18. --[[!!]]    switchInstant = switchInstantoriginal
  19.   end;
  20. }
Через пару дней сообщите, удобно ли это, и всё ли работает ожидаемым образом.
Пока, вроде, всё удобно (с учётом моей модификации).
John Doe wrote:Есть ещё один момент: после того, как вы начали переключение CtrlTab (без списка), но до того, как вы отпустите Ctrl, вам тоже может понадобиться отобразить меню. CtrlF12 в этом случае сработает, а CtrlCapsLock - нет. Надо ли?
Для меня это работает как два разных подхода. По CtrlTab я или вообще переключаюсь на автомате, заранее зная, сколько раз нажать надо, или ориентируюсь по содержимому окна. По CtrlCapsLock я переключаюсь, ориентируясь по заголовку окна. У меня эти два разных подхода не пересекаются на практике. Следовательно, вызывать меню для CtrlTab не понадобится.

Кстати, по поводу F6. Нельзя ли назначить на неё макрос, в котором временно отключать события, вызывать Keys("F6"), и снова включать события? Или это я перемудрил?

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by John Doe »

Подумаю как можно аккуратно совместить требуемый вам способ переключения с имеющимися.
IgorZ wrote:Кстати, по поводу F6. Нельзя ли назначить на неё макрос, в котором временно отключать события, вызывать Keys("F6"), и снова включать события? Или это я перемудрил?
Да, макросом можно, но если вместо F6 кликнуть на линейке клавиш, то...
Желательно исправить проблему в фаре, не хотелось бы укоренять какие-то костыли.

P.S.
В качестве очень временного workaround:
С лёту может не заработать, сейчас не могу протестировать, демонстрирую лишь идею

Edit:
Вроде работает, сейчас глубже ковырять некогда, поэтому держите полный текст с заплаткой для F6

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by John Doe »

А при использовании RecentScreens кто как предпочитает переключаться в панели?
CtrlTab или отдельной комбинацией?
Alt0?

gerser
Posts: 58
Joined: Tue 11 Oct, 2005 20:13
Location: Сургут
Contact:

Re: RecentScreens — переключение между окнами как в MS Windo

Post by gerser »

Я из редактора в панели переключался по комбинации Alt`, а из панелей по ней же в редактор в тот, из которого вышел последний раз. Было это во времена 1.7. В 3 хочу также :)

User avatar
HaRT
Moderator
Posts: 9445
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 222 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by HaRT »

Я без RecentScreens переключаюсь по Alt0 и не вижу, почему с RecentScreens это должно измениться.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

Re: RecentScreens — переключение между окнами как в MS Windo

Post by Docent1 »

А можно как-то заменить "Tab" на "`" (это на одну клавишу выше)? Я пробовал в скрипте macroKey = "Tab" заменить на macroKey = "`" но он работает только при CtrlSift`. Просто у меня на Tab повешено сравнение и вроде привык. А вообще бы в идеале клавиша назначается польвователем (но это вряд ли получится - как бы мкрос переписывается)?
Docent1

Docent1
Posts: 561
Joined: Thu 31 Mar, 2005 23:13
Been thanked: 1 time

Re: RecentScreens — переключение между окнами как в MS Windo

Post by Docent1 »

Вопрос снимается: разобрался
Docent1

User avatar
Tim Sobolev
Posts: 705
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by Tim Sobolev »

Открываем любой файл на редактирование, для которого в ESC "<lockfile value="on"/>", жмём F6 и вуаля, работать больше нельзя.

Проблемы как со скриптом из шапки, так и с фиксом на этой странице.


User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by John Doe »

Там ошибка, eval(mf.waitkey()) надо исправить на Keys(mf.waitkey())

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

r3.6

Post by John Doe »

Исправлены ошибки, скрипт адаптирован к изменениям билда 4026.

В шапке.
Docent1 wrote:А можно как-то заменить "Tab" на "`" (это на одну клавишу выше)?
Теперь достаточно изменить переменную macroKey в начале файла.
IgorZ wrote:Идеальное для меня поведение, выявленное экспериментально - по CtrlTab немедленное переключение по списку без вывода меню, а по CtrlCapsLock вывод меню с переключением после отпускания Ctrl.
Теперь в комплекте отдельный макрос на CtrlCapsLock, по умолчанию неактивен (NoMacro).

P.S.
В режиме с отображением списка переключение происходит только при отпускании Ctrl (т.е. режим Instant не работает).
Причина: баг, внесённый в билде фара 3847: фаре http://bugs.farmanager.com/view.php?id=1301#c12736

Игорь Юдинцев
Posts: 725
Joined: Sun 03 Apr, 2005 22:00
Location: Казань
Been thanked: 2 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by Игорь Юдинцев »

John Doe
На вьюверах переключение сбоит. Открываем три файла, жмём и удерживаем Ctrl+Tab так, чтобы файл 1 сменился на файл 2, в появившемся меню выбираем файл 3. Результат: в заголовке консоли видим «просмотр файла 3», на экране по-прежнему просмотр файла 2.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

Re: RecentScreens — переключение между окнами как в MS Windo

Post by John Doe »

Воспроизводится почти всегда при переключении между двумя вьюверами.
Если после этого во вьювере нажать (например) PgUp, то на экране проявляется правильный файл.

Скрипт честно посылает ACTL_SETCURRENTWINDOW и ACTL_COMMIT.
Похоже баг в фаре.

Update
Так и есть, после ACTL_COMMIT неправильно работает VCTL_GETINFO.
Можно убедиться, добавив после строки 78 проверку:
  1. if Area.Viewer and viewer.GetInfo().ViewerID~=far.AdvControl (F.ACTL_GETWINDOWINFO).Id then
  2.   error"~="
  3. end

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

r3.7

Post by John Doe »

  • Игнорируем окно Desktop
  • Вычурно обходим баги фара
В шапке.

User avatar
Tim Sobolev
Posts: 705
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: RecentScreens — переключение между окнами как в MS Windows™

Post by Tim Sobolev »

Будет ли возвращена настраиваемая поддержка Desktop Screen и удалены костыли которые были добавлены до применения фиксов в FAR?

Post Reply

Return to “Полезные макросы и скрипты”