RecentScreens — переключение между окнами как в MS Windows™
Posted: Tue 09 Apr, 2013 13:02
by John Doe
В большинстве приложений, которые я использую, переключение между окнами происходит в порядке их использования (MRU order).
Но не во всех, пример исключений: FAR manager, Google Chrome.
Для решения этой проблемы в фаре был когда-то такой плагинчик RecentScreens — меню «Экраны» в порядке использования
http://plugring.farmanager.com/plugin.php?pid=813 wrote:Плагин RecentScreens может служить заменой стандартному меню Screens (Экраны). При этом список окон в меню отсортирован в порядке использования. Так же плагин позволяет переключаться между окнами с помощью Ctrl-Tab аналогично тому, как это происходит в Opera (или Visual Studio).
Переключение окон-экранов по умолчанию заменяет LCtrlTab (только левый Ctrl).
В отличии от обычного переключения экранов — в процессе переключения может отображаться список окон (до тех пор, пока удерживается Ctrl).
За исключением порядка элементов, вид списка соответствует стандартному меню Screens (F12).
- так же: (*) помечены редакторы с несохранёнными изменениями.
- отличие: для панелей отображаются путь папки, открытой на активной панели (а не файл под курсором)
- отличие: корректно обрабатываются модальные окна Update: после 4138 билда отображаемые номера окон не соответствуют
CtrlTab / CtrlShiftTab — вперёд/назад по списку.
Также работают и Ctrl- Up|Down|PgUp|PgDn|Home|End. Пока список на экране — перемещаться по его элементам можно и с помощью мыши.
Ctrl<hot_key> — переход к окну с заданной горячей клавишей (хоткей фиксированный, соответствует тому, что в стандартном Screens)
Если отображение списка отключено в настройках, то его можно вызвать по CtrlF12
Независимо от настроек список показывается при вызове из единственного окна, и в модальных редакторах/вьюверах
Настройка осуществляется прямо в списке окон, вот справка (доступна по F1).
local switchInstant = S.switchInstant==nil and true or S.switchInstant
"and true" - лишнее.
Не совсем так.
true выступает как дефолтное значение, применяемое при отсутствии записи в базе.
А вы подумайте ещё.
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Tue 23 Apr, 2013 21:54
by John Doe
Что тут думать, вы безусловно правы в том, что СЕЙЧАС его можно безболезненно отбросить, упростив таким образом выражение.
Но представьте, что там не значение, а переменная switchInstantDefault
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Tue 23 Apr, 2013 21:55
by John Doe
Есть подозрение, что опция "задержка меню" избыточна.
И вместо неё стоит сделать что-либо попроще, например:
- появление меню после второго нажатия CtrlTab
- отдельный хоткей для переключения с отображением списка (CtrlCapsLock)
- ...
Какие будут мнения?
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Tue 23 Apr, 2013 21:59
by Shmuel
John Doe wrote:Но представьте, что там не значение, а переменная switchInstantDefault
В этом случае согласен.
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 03:50
by IgorZ
John Doe wrote:Есть подозрение, что опция "задержка меню" избыточна.
И вместо неё стоит сделать что-либо попроще, например:
- появление меню после второго нажатия CtrlTab
- отдельный хоткей для переключения с отображением списка (CtrlCapsLock)
- ...
Какие будут мнения?
Отдельный хоткей лично мне был бы удобнее. Может, настройку вариантов поведения сделать, если будут и другие пожелания?
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 09:26
by John Doe
IgorZ wrote:Отдельный хоткей лично мне был бы удобнее. Может, настройку вариантов поведения сделать, если будут и другие пожелания?
Есть хоткей для открытия меню - CtrlF12. Не оно?
Тогда выключите в настройках отображение списка, и добавьте ещё один макрос на отдельный хоткей (CtrlCapsLock)
if w.Type==F.WTYPE_PANELS then Pop(makeUniqueId("Panels",0))end
getWindowById:Init()
if band(w.Flags,F.WIF_MODAL)~=0then showRecentScreens(1,"modal");returnend
local pos = new_pos(1,akey(1):gsub("CapsLock","Tab"))
stopMonitoring =true
pos = showRecentScreens(pos)
Pos = getWindowById[Screens[pos]].Pos
Pop(Screens[pos])
gotoWindow(Pos)
stopMonitoring =false
LockState("Caps",0)
end;
}
Через пару дней сообщите, удобно ли это, и всё ли работает ожидаемым образом.
Есть ещё один момент: после того, как вы начали переключение CtrlTab (без списка), но до того, как вы отпустите Ctrl, вам тоже может понадобиться отобразить меню. CtrlF12 в этом случае сработает, а CtrlCapsLock - нет. Надо ли?
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 10:19
by John Doe
Обнаружилась проблема при переключении между редактором/вьювером с помощью F6.
А потом при выходе из файла и фар падает...
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 10:23
by 2useven10
подробнее можно ?
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 10:28
by John Doe
Установить скрипт, открыть файл, нажать F6, полюбоваться на красное окошко (это мой ассерт, так что нормально), попытаться закрыть файл, получить трап.
Но это ещё не багрепорт, позже дам минимальный макрос для воспроизведения трапа.
RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 11:02
by John Doe
1. Если в редакторе нажать F6, то событие VE_READ приходит раньше чем EE_CLOSE.
Во вьювере вероятно аналогично, нажать F6, то событие EE_READ приходит раньше чем VE_CLOSE.
2.Если во время EE_CLOSE/VE_CLOSE вызвать far.AdvControl (F.ACTL_GETWINDOWINFO), то вернётся nil
(Падает в обоих случаях, что вызывает трап ещё не выяснил)
P.S.
Приложил коллекцию сегодняшних трапов, они отличаются
<удалено>
Re: RecentScreens — переключение между окнами как в MS Windo
Posted: Wed 24 Apr, 2013 11:37
by John Doe
Разобрался.
Проблема вызвана самим выводом сообщений во время событий закрытия редактора/вьювера.
Проявляется только при переходе через F6.
Вот минимум для воспроизведения: