Page 1 of 7

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

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

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

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



Требуется FAR3 build 5547 или новее.

[download] https://chiselapp.com/user/johnd0e/repo ... creens.lua

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

Posted: Tue 09 Apr, 2013 13:09
by John Doe
P.S.
В тексте осталась пара ассертов, думаю не повредят.

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

Posted: Tue 09 Apr, 2013 13:42
by Shmuel
в процессе переключения отображается список окон
Это надо бы сделать опциональным. Может раздражать.

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

Posted: Tue 09 Apr, 2013 13:52
by John Doe
Если не отображать список, то теряется обратная связь, и тогда может раздражать кажущаяся непредсказуемость переключения.
"Кажущаяся" в том смысле, что за годы использования CtrlTab неизбежно сложился стереотип, и визуальный контроль помогает его преодолеть.
К тому же во всех известных мне приложениях список отображается.

Но я подумаю о такой опции.

P.S.
Без списка было бы в 2 раза меньше кода )

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

Posted: Tue 09 Apr, 2013 14:02
by Max Rusov
John Doe wrote:К тому же во всех известных мне приложениях список отображается
Обычно, если отображается список, то переключение происходит в момент отпускания префиксной клавиши. А в Вашем макросе переключение происходит сразу, т.ч. непредсказуемости нет.

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

Posted: Tue 09 Apr, 2013 14:08
by Shmuel
John Doe wrote:Если не отображать список, то теряется обратная связь, и тогда может раздражать кажущаяся непредсказуемость переключения.
"Кажущаяся" в том смысле, что за годы использования CtrlTab неизбежно сложился стереотип, и визуальный контроль помогает его преодолеть.
К тому же во всех известных мне приложениях список отображается.
1. Я так и не смог привыкнуть к родной последовательности переключения Фара, поэтому проблем не предвижу.
2. SciTE и ZeroBrane Studio - при переключении список окон не отображается.

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

Posted: Tue 09 Apr, 2013 14:14
by John Doe
Max Rusov wrote:Обычно, если отображается список, то переключение происходит в момент отпускания префиксной клавиши. А в Вашем макросе переключение происходит сразу, т.ч. непредсказуемости нет.
Действительно.
Значит сделаем.

P.S.
Эх, надеялся что всё уже, а теперь ещё придётся подумать над третьим вариантом (переключением в момент отпускания)
:-)

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

Posted: Tue 09 Apr, 2013 14:18
by John Doe
Shmuel wrote:Я так и не смог привыкнуть к родной последовательности переключения Фара
Как же выходите из положения?

И действительно ли список раздражает? (вопрос ко всем)

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

Posted: Tue 09 Apr, 2013 14:25
by Shmuel
John Doe wrote:
Shmuel wrote:Я так и не смог привыкнуть к родной последовательности переключения Фара
Как же выходите из положения?
Работаю в редакторе SciTE.
John Doe wrote:И действительно ли список раздражает? (вопрос ко всем)
Если переключаемых окон всего 2, например, то список вообще лишний. Поэтому и раздражает, и кроме того, он ярче фона редактора. Мелькает зря.
Но когда открытых окон больше, список становится более полезен.

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

Posted: Tue 09 Apr, 2013 14:32
by John Doe
Shmuel wrote:Если переключаемых окон всего 2, например, то список вообще лишний.
А если так?

Code: Select all

  action=function()
    if #Screens==2 then Keys("CtrlTab") return end
...

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

Posted: Tue 09 Apr, 2013 14:34
by Max Rusov
Меня больше раздражает то, что строка "Panels:..." заканчивается именем файла (текущего файла в панели). Это делает ее трудноотличимой от собственно файла, и я путаюсь. Было бы логичнее, чтобы "Panels:..." содержал только имя каталога. Это относится и к диалогу F12, конечно, но там она всегда первая - легче ориентироваться.

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

Posted: Tue 09 Apr, 2013 14:51
by John Doe
Согласен.
Подправить:

Code: Select all

    w.text = ("&%d. %-9s %1s %s"):format(w.Pos-1,w.TypeName,EditorSaved==0 and "*" or "" ,name)
А перед ней добавить

Code: Select all

    local name = (w.Type == F.WTYPE_PANELS) and mf.fsplit(w.Name,0x1+0x2) or w.Name

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

Posted: Tue 09 Apr, 2013 14:52
by Max Rusov
Еще пожелание: если пользоваться макросами прямого переключения окон (Alt1, Alt2...) то переключение через RecentScreens ломается. Если возможно, хотелось бы, чтобы макросы прямого переключения окон были интегрированы в RecentScreens и совместимы с ним.

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

Posted: Tue 09 Apr, 2013 14:58
by John Doe
Я ими не пользуюсь, потому как они конфликтуют с быстрым поиском.
Но попробуйте так:
  1. Macro { description="Use Alt-digit to switch between screens";
  2.  
  3.   area=allScreens; key="/^[LR]Alt[0-9]$/"; priority=60;
  4.  
  5.   condition = function(akey) return tonumber(akey:sub(-1))<#Screens end;
  6.  
  7.   action = function() gotoWindow(akey(1):sub(-1)+1) end;
  8.  
  9. }
P.S.
Плохо что в фаре не предусмотрены события при переключении экранов.
Есть GOTFOCUS, но только для редактора/вьювера (не в панелях), и срабатывает на кучу всего лишнего (закрытие диалогов)

RecentScreens r1

Posted: Tue 09 Apr, 2013 15:10
by John Doe
Обновил шапку, с учётом приведённых выше изменений, пусть это будет r1
Макрос-замена AltScreens.lua находится в конце, кому надо раскомментируйте, добавлением ещё одного минуса перед --[[