Переключение дисков по Ctrl/Alt/Shift+←/→

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Переключение дисков по Ctrl/Alt/Shift+←/→

Post by IgorZ »

Макрос написан по мотивам анси-плагина Change Active Drive by Ilya V. Gershman
Стрелки (или другие назначенные клавиши) в сочетании с LeftCtrl/LeftAlt/RightCtrl/RightAlt/Shift в указанных комбинациях меняют диск для левой/правой/активной/пассивной (в зависимости от настроек) панели. Замечания и предложения принимаются с благодарностью.

Attachments
CtrlAltMenuDisk.4.1.4.7z
(18.93 KiB) Downloaded 260 times
Last edited by IgorZ on Wed 30 Dec, 2020 09:09, edited 10 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

Latest post of the previous page:

Предлагаю улучшение: не пытаться менять диск, если выбранный совпадает с текущим.
(В противном случае теряется позиция и выделение в панели.)


Сюда же: если не удалось получить букву текущей панели, то отобразить её как "#"
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

Дополнительная фича: исключить из отображения диски, перечисленные в local ExcludeDisks="aey", для этого в цикл заполнения списка дисков добавить условие not ExcludeDisks:upper():find(string.char(i))
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

И главное (для меня) исправление: предпочитаю использовать левосторонние модификаторы.
Хочу с помощью Ctrl менять диск активной панели, а с помощью Alt - пассивной.
Это очень просто: WPanel = KeyMod:find("Ctrl") and APanel or PPanel.
Можно в виде опции local Ctrl_is_APanel_Mode=1, тогда будет так:
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by Shmuel »

Мелкое усовершенствование:

Code: Select all

-- вместо
local KeyMod = Key:sub(1,Key:find(".[LR]"))
-- использовать
local KeyMod = Key:match("(.-)[LR]")
-- или
local KeyMod = Key:match(".%l+")
 
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by 2useven10 »

'Главное' исправление не соответствует оставленному комментарию, который описывает поведение макроса (назначение клавиш).
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

Разве?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by IgorZ »

John Doe wrote:После завершения смены диска на погашенной панели - не происходит перерисовки.
Т.е. список дисков остаётся на экране.

P.S.
Мелочь конечно.
Но если обрабатывать эту ситуацию, то наверно стоит в этом случае включать панель.
Разумно.
John Doe wrote:Предлагаю улучшение: не пытаться менять диск, если выбранный совпадает с текущим.
(В противном случае теряется позиция и выделение в панели.)
Сюда же: если не удалось получить букву текущей панели, то отобразить её как "#"
ОК
John Doe wrote:Дополнительная фича: исключить из отображения диски, перечисленные в local ExcludeDisks="aey"
Не вижу смысла, но если надо, мне нетрудно.
John Doe wrote:И главное (для меня) исправление: предпочитаю использовать левосторонние модификаторы.
Хочу с помощью Ctrl менять диск активной панели, а с помощью Alt - пассивной.
Лично я кучу лет пользовал плангин и сознательно делал макрос под те же комбинации клавиш. Но как альтернативный режим - хорошо. Будем за счёт дополнительных предложений увеличивать численность клиентуры, повышая тем самым капитализацию. :D
Shmuel wrote:Мелкое усовершенствование:
Спасибо. А то я не очень уверенно владею шаблонами. Правда там нужно две точки - для правых модификаторов.
новая версия 2.2
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

Code: Select all

if WPanel.Path:sub(2,2)==":" then -- на рабочей панели локальный диск?
  local DrvNum = DrvList:find(WPanel.Path:sub(1,1)) -- его номер в списке
else
  DrvList = "?"..DrvList -- добавим в первую позицию условное текущее содержимое панели
  local DrvNum = 1 -- и запомним его
end
local DrvNum = WPanel.Path:sub(2,2)==":" and DrvList:find(WPanel.Path:sub(1,1)) or 1 -- номер текущего диска в списке
Баг!
1. Последняя строка - лишняя.
2. Объявляя переменную как local внутри блока условия - мы теряем её значение снаружи.

Вот так ещё можно:
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

Code: Select all

if not WPanel.Visible then if WPanel.Left then Keys("CtrlF1") else Keys("CtrlF2") end end -- включим изменяемую панель, если выключена
Есть мнение, что если погашены обе панели (CtrlO), то и включать лучше обе.

И на мой вкус, включать стоит после смены диска (т.е. после отпускания клавиши).
Кстати в этом случае можно обойтись без принудительной перерисовки панели:

Code: Select all

if WPanel.Visible then
  panel.RedrawPanel(nil,WPanel==APanel and 1 or 0) -- обновим содержимое
else -- включим изменяемую панель, если выключена
  if APanel.Visible==PPanel.Visible then 
    Keys("CtrlO")
  else
    if WPanel.Left then Keys("CtrlF1") else Keys("CtrlF2") end 
  end
end 
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

IgorZ wrote:Лично я кучу лет пользовал плангин и сознательно делал макрос под те же комбинации клавиш.
Я плагином не пользовался, но судя по readme.txt там очень гибкая конфигурация, в частности есть это:
IgorZ wrote:
John Doe wrote:Дополнительная фича: исключить из отображения диски, перечисленные в local ExcludeDisks="aey"
Не вижу смысла, но если надо, мне нетрудно.
Кстати в плагине было:
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by IgorZ »

John Doe wrote:Баг!
1. Последняя строка - лишняя.
2. Объявляя переменную как local внутри блока условия - мы теряем её значение снаружи.
Блин! Вот нельзя одновременно программировать и заниматься своими должностными обязанностями! Мешает одно другому, надо исключать лишнее. :) Поправил.
John Doe wrote:Есть мнение, что если погашены обе панели (CtrlO), то и включать лучше обе.
Вот тут не согласен. Если панели выключены, значит, это зачем-то нужно.
Если действительно надо, могу добавить настройку: включать обе или только переключаемую.
P. S. Сделал-таки. На любой вкус: можно включать обе, можно одну, можно 0. Так логичнее.
John Doe wrote:И на мой вкус, включать стоит после смены диска (т.е. после отпускания клавиши).
Кстати в этом случае можно обойтись без принудительной перерисовки панели:
А тут даже не дело вкуса. Правильнее включать, только если диск реально сменился. Так что перенёс.
John Doe wrote:
IgorZ wrote:Лично я кучу лет пользовал плангин и сознательно делал макрос под те же комбинации клавиш.
Я плагином не пользовался, но судя по readme.txt там очень гибкая конфигурация
Ну так свою конфигурацию я не гнул :)
John Doe wrote:
IgorZ wrote:Не вижу смысла, но если надо, мне нетрудно.
Кстати в плагине было:
Ну так и тут уже есть ;)
новая версия 2.2.1
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

IgorZ wrote:
John Doe wrote:Есть мнение, что если погашены обе панели (CtrlO), то и включать лучше обе.
Вот тут не согласен. Если панели выключены, значит, это зачем-то нужно.
Я немного о другом.

1. По моему опыту в большинстве случаев панели гасятся/включаются с помощью CtrlO (а точнее макросом на Esc).
И в этом случае включить только одну панель - это совсем не то: выключали одной клавишей, а включать надо двумя другими (причём это уже после нескольких бесплодных попыток использовать изначальную).

2. Если полагать, что панели выключены не зря, то наверно и включать не стоит.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by IgorZ »

John Doe wrote:1. По моему опыту в большинстве случаев панели гасятся/включаются с помощью CtrlO (а точнее макросом на Esc).
И в этом случае включить только одну панель - это совсем не то: выключали одной клавишей, а включать надо двумя другими (причём это уже после нескольких бесплодных попыток использовать изначальную).
Кстати, возможно, имеет смысл модифицировать стандартный макрос примерно так:

Многим, думаю, покажется проще пару раз нажать Esc, чем тянуться за Ctrl+P.
John Doe wrote:2. Если полагать, что панели выключены не зря, то наверно и включать не стоит.
Да и ладно. Теперь каждый сам себе настроит, как считает правильным.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by John Doe »

Баг1.
Если смены диска не произошло, то панели не перерисовываются.
panel.RedrawPanel(nil,WPanel==APanel and 1 or 0) -- обновим содержимое

Баг2.
Если SwitchPanelsOn = 0, то даже если смена диска произошла, список дисков остаётся на экране.
Ожидаемо, т.к. RedrawPanel не работает при погашенной панели.
User avatar
ur4ltz
Posts: 76
Joined: Fri 08 Jan, 2010 14:07
Location: Харьков
Has thanked: 1 time

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by ur4ltz »

John Doe wrote:Баг1.
Если смены диска не произошло, то панели не перерисовываются.
panel.RedrawPanel(nil,WPanel==APanel and 1 or 0) -- обновим содержимое
.
И это правильно сделано!
А если я просто забыл что тут макрос сидит? А не сдвиг размера панелей делал?
НЕ НУЖНО вешать макросы на стандартные сочетания клавиш!!
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Переключение дисков по Ctrl/Alt/Shift+<-/->

Post by IgorZ »

John Doe wrote:Баг1.
Если смены диска не произошло, то панели не перерисовываются.
panel.RedrawPanel(nil,WPanel==APanel and 1 or 0) -- обновим содержимое

Баг2.
Если SwitchPanelsOn = 0, то даже если смена диска произошла, список дисков остаётся на экране.
Ожидаемо, т.к. RedrawPanel не работает при погашенной панели.
Баг2 поправил. Оказывается, таки есть в luafar нужные методы против Кости Сапрыкина работы с экраном. Просто я их не в том разделе раньше искал. Заодно исправился баг1.
Post Reply

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