RecentScreens — переключение между окнами как в MS Windows™
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
RecentScreens — переключение между окнами как в MS Windows™
В большинстве приложений, которые я использую, переключение между окнами происходит в порядке их использования (MRU order).
Но не во всех, пример исключений: FAR manager, Google Chrome.
Для решения этой проблемы в фаре был когда-то такой плагинчик RecentScreens — меню «Экраны» в порядке использования
Вашему вниманию предлагается LuaMacro-реализация подобной функциональности.
Переключение окон-экранов по умолчанию заменяет LCtrlTab (только левый Ctrl).
В отличии от обычного переключения экранов — в процессе переключения может отображаться список окон (до тех пор, пока удерживается Ctrl).
Требуется FAR3 build 5547 или новее.
[download] https://chiselapp.com/user/johnd0e/repo ... creens.lua
Но не во всех, пример исключений: FAR manager, Google Chrome.
Для решения этой проблемы в фаре был когда-то такой плагинчик RecentScreens — меню «Экраны» в порядке использования
Вашему вниманию предлагается LuaMacro-реализация подобной функциональности.
Переключение окон-экранов по умолчанию заменяет LCtrlTab (только левый Ctrl).
В отличии от обычного переключения экранов — в процессе переключения может отображаться список окон (до тех пор, пока удерживается Ctrl).
Требуется FAR3 build 5547 или новее.
[download] https://chiselapp.com/user/johnd0e/repo ... creens.lua
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
RecentScreens r1
Latest post of the previous page:
Обновил шапку, с учётом приведённых выше изменений, пусть это будет r1Макрос-замена AltScreens.lua находится в конце, кому надо раскомментируйте, добавлением ещё одного минуса перед --[[
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: RecentScreens — переключение между окнами как в MS Windo
Макрос AltScreens надо бы доработать - выдает ошибку, если нажать Alt-Цифру, больше чем есть окон.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: RecentScreens — переключение между окнами как в MS Windo
Как вариант
или проверять что Screens закрылся
или использовать Object.CheckHotkey()
Code: Select all
condition = function(akey) return tonumber(akey:sub(-1))<#Screens end;
Code: Select all
if not Area.Menu then Pop(getWindow().UniqueId) end
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
RecentScreens r1.1
r1.1
Поведение RecentScreens можно отрегулировать, изменяя следующие параметры (в самом начале скрипта):
Дайте знать, если считаете, что умолчательные параметры не оптимальны, или нужно какое-то другое поведение.
Поведение RecentScreens можно отрегулировать, изменяя следующие параметры (в самом начале скрипта):
- modeAutoSwitch (true/false) — переключать окна при каждом перемещении курсора в списке / или при закрытии списка.
- modeNoMenu (false/true) — отображать / не отображать список на экране.
Независимо от состояния этого параметра список не будет показан если окна только два.
Дайте знать, если считаете, что умолчательные параметры не оптимальны, или нужно какое-то другое поведение.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
RecentScreens r2
r2
- теперь по умолчанию макрос заменяет CtrlTab, а для изменения комбинации на CtrlCapsLock надо использовать параметр в начале скрипта.
- корректно обрабатываются модальные окна
- отслеживаются все "внешние" переключения окон, теперь нет необходимости в замене макроса AltScreens.lua (на прошлой странице).
Ассерты пока оставил, срабатывать по идее не должны, но если что дайте знать. - Новая функция: список может появляться с задержкой (и при быстром переключении соответственно отображаться не будет)
- macroKey = "Tab" | "CapsLock" — здесь можно поменять клавишу для активации переключения
- menuDelay = 400 | 0 | nil/-1 — задержка (мс) перед отображением списка экранов
0 — отображать сразу
nil или -1 — не отображать никогда - switchInstant = true | false — переключать окна при каждом перемещении курсора в списке / или после закрытия списка.
Re: RecentScreens — переключение между окнами как в MS Windo
У меня Far 3258. Скопировал RecentScreens.lua в Far3\Profile\Macros\scripts\. При запуске Far предупреждение: ...
Code: Select all
Far3\Profile\Macros\scripts\RecentScreens.lua:55: attempt to index local 'w' (a number value)
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: RecentScreens — переключение между окнами как в MS Windo
v2 при загрузке макросов:
Code: Select all
...Far Manager\Profile\Macros\scripts\RecentScreens.lua:109: attempt to index field 'Guids' (a nil value)
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: RecentScreens — переключение между окнами как в MS Windo
Нужен хотя бы 3299hobo wrote:У меня Far 3258. Скопировал RecentScreens.lua в Far3\Profile\Macros\scripts\. При запуске Far предупреждение: ...Code: Select all
Far3\Profile\Macros\scripts\RecentScreens.lua:55: attempt to index local 'w' (a number value)
Удалите эту строку local ScreensSwitchId = far.Guids.ScreensSwitchId, она не используется.Shmuel wrote:v2 при загрузке макросов:Code: Select all
...Far Manager\Profile\Macros\scripts\RecentScreens.lua:109: attempt to index field 'Guids' (a nil value)
Сейчас перезалью...
Re: RecentScreens — переключение между окнами как в MS Windo
Ламер (I am) юзает только стабильные сборки с тех пор, как он появилисьJohn Doe wrote:Нужен хотя бы 3299
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: RecentScreens — переключение между окнами как в MS Windo
Строку 247 можно модифицировать так:
В этом случае меню будет появляться не только по таймеру, но и по второму нажатию Ctrl-Tab.
Можно было бы сделать и такой режим, но не знаю стоит ли, жду отзывов.
Code: Select all
if key~="" or timer(menuDelay) then pos = showRecentScreens(pos);break end
Можно было бы сделать и такой режим, но не знаю стоит ли, жду отзывов.
Re: RecentScreens — переключение между окнами как в MS Windo
Если пробовать переключать окна когда открыт редактор из поиска (Alt-F7, что-то найти, F4 на файле), то вылетает страшное красное окно с ассертом из фyнкции WindowsById. Хоть переключать окна при поиске ФАР и не дает (впрочем с юзерской точки зрения непонятно с какой стати не дает, тоже баг в общем-то), но все-таки пугать красным окном не надо.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: RecentScreens — переключение между окнами как в MS Windo
Фар свежий?
Ситуация с модальным редактором учитывается, и вылетать ничего не должно.
Воспроизвести не могу.
Скопируйте сюда текст сообщения.
Update
Очевидно у вас старая версия скрипта, в новом такого имени функции просто нет.
Скачайте свежий из шапки (и фар должен быть nightly)
Ситуация с модальным редактором учитывается, и вылетать ничего не должно.
Воспроизвести не могу.
Скопируйте сюда текст сообщения.
Update
Очевидно у вас старая версия скрипта, в новом такого имени функции просто нет.
Скачайте свежий из шапки (и фар должен быть nightly)
Re: RecentScreens — переключение между окнами как в MS Windo
А, я не заметил что скрипт ненавязчиво обновился, у меня старей был. Но какая-то ошибка все равно еасть: если перекючать из той же ситуации (редактор из поиска), то игнорируется "menuDelay = -1" и меню окон всегда показывается.
ЕДИТ: Ща ФАР тоже обновлю.
ЕДИТ2: Обновил, все равно из поиска menuDelay игнорирует.
ЕДИТ: Ща ФАР тоже обновлю.
ЕДИТ2: Обновил, все равно из поиска menuDelay игнорирует.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: RecentScreens — переключение между окнами как в MS Windo
Так и задумано, за это отвечает строка 264: . Можете исправить по своему усмотрению.AsX wrote:Но какая-то ошибка все равно еасть: если перекючать из той же ситуации (редактор из поиска), то игнорируется "menuDelay = -1" и меню окон всегда показывается.
Если окон кроме панели нет, то тоже показывается меню, за это отвечает 267
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: RecentScreens — переключение между окнами как в MS Windo
Есть такой баг:
-- открыты только панели, допустим в папке C:\
-- нажимаем CtrlTab, удерживаем Ctrl -> меню сабжа показывает C:\
-- переходим в какую-либо подпапку, напр. C:\MyDir
-- нажимаем CtrlTab, удерживаем Ctrl -> меню сабжа по-прежнему показывает C:\
-- открыты только панели, допустим в папке C:\
-- нажимаем CtrlTab, удерживаем Ctrl -> меню сабжа показывает C:\
-- переходим в какую-либо подпапку, напр. C:\MyDir
-- нажимаем CtrlTab, удерживаем Ctrl -> меню сабжа по-прежнему показывает C:\
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: RecentScreens — переключение между окнами как в MS Windo
Это обрезание так упрощёно работает, строка 198
Пометил себе.
Update
Нет, с обрезанием всё в порядке.
А описанный эффект возникает от того, что курсор стоит на элементе ".."
Нажмите F12, увидите.
Предлагаю такое решение:
Пометил себе.
Update
Нет, с обрезанием всё в порядке.
А описанный эффект возникает от того, что курсор стоит на элементе ".."
Нажмите F12, увидите.
Предлагаю такое решение:
Code: Select all
local name = (w.Type==F.WTYPE_PANELS) and APanel.Path.."\\" or w.Name