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

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

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

Post by IgorZ » Fri 02 Nov, 2012 05:53

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

Attachments
CtrlAltMenuDisk.4.1.2.7z
(18.86 KiB) Downloaded 1 time
Last edited by IgorZ on Wed 04 Dec, 2019 07:22, edited 8 times in total.

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

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

Post by John Doe » Mon 04 Feb, 2013 16:54

Latest post of the previous page:

Дополнительная фича: исключить из отображения диски, перечисленные в local ExcludeDisks="aey", для этого в цикл заполнения списка дисков добавить условие not ExcludeDisks:upper():find(string.char(i))

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

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

Post by John Doe » Mon 04 Feb, 2013 17:13

И главное (для меня) исправление: предпочитаю использовать левосторонние модификаторы.
Хочу с помощью Ctrl менять диск активной панели, а с помощью Alt - пассивной.
Это очень просто: WPanel = KeyMod:find("Ctrl") and APanel or PPanel.
Можно в виде опции local Ctrl_is_APanel_Mode=1, тогда будет так:

Shmuel
Posts: 5921
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 233 times

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

Post by Shmuel » Mon 04 Feb, 2013 17:30

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

Code: Select all

-- вместо
local KeyMod = Key:sub(1,Key:find(".[LR]"))
-- использовать
local KeyMod = Key:match("(.-)[LR]")
-- или
local KeyMod = Key:match(".%l+")
 

2useven10
Posts: 3983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 173 times

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

Post by 2useven10 » Mon 04 Feb, 2013 18:21

'Главное' исправление не соответствует оставленному комментарию, который описывает поведение макроса (назначение клавиш).

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

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

Post by John Doe » Mon 04 Feb, 2013 19:28

Разве?

IgorZ
Posts: 642
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Tue 05 Feb, 2013 09:33

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: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Tue 05 Feb, 2013 13:08

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: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Tue 05 Feb, 2013 13:36

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: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Tue 05 Feb, 2013 14:15

IgorZ wrote:Лично я кучу лет пользовал плангин и сознательно делал макрос под те же комбинации клавиш.
Я плагином не пользовался, но судя по readme.txt там очень гибкая конфигурация, в частности есть это:
IgorZ wrote:
John Doe wrote:Дополнительная фича: исключить из отображения диски, перечисленные в local ExcludeDisks="aey"
Не вижу смысла, но если надо, мне нетрудно.
Кстати в плагине было:

IgorZ
Posts: 642
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Wed 06 Feb, 2013 06:38

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: 12531
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 235 times

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

Post by John Doe » Wed 06 Feb, 2013 10:00

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

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

2. Если полагать, что панели выключены не зря, то наверно и включать не стоит.

IgorZ
Posts: 642
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Wed 06 Feb, 2013 10:29

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

Многим, думаю, покажется проще пару раз нажать Esc, чем тянуться за Ctrl+P.
John Doe wrote:2. Если полагать, что панели выключены не зря, то наверно и включать не стоит.
Да и ладно. Теперь каждый сам себе настроит, как считает правильным.

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

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

Post by John Doe » Wed 06 Feb, 2013 15:31

Баг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 » Wed 06 Feb, 2013 22:29

John Doe wrote:Баг1.
Если смены диска не произошло, то панели не перерисовываются.
panel.RedrawPanel(nil,WPanel==APanel and 1 or 0) -- обновим содержимое
.
И это правильно сделано!
А если я просто забыл что тут макрос сидит? А не сдвиг размера панелей делал?
НЕ НУЖНО вешать макросы на стандартные сочетания клавиш!!

IgorZ
Posts: 642
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Thu 07 Feb, 2013 04:06

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

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

IgorZ
Posts: 642
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 11 times
Been thanked: 48 times

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

Post by IgorZ » Fri 05 Apr, 2013 04:17

В связи с переносом тем посмотрел и обнаружил, что не выкладывал версию с правкой после смены DisableOutput на EnableOutput. Выложена.

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

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

Post by John Doe » Fri 10 May, 2013 20:42

Code: Select all

local DrvList = "" -- заготовка под список дисков в системе
local drvs = win.GetLogicalDriveStrings()
for i = 1,#drvs do
  local d = drvs[i]:sub(1,1)
  if not ExcludeDrives:find(d) then  DrvList = DrvList..d end -- если не исключён - добавим
end

Post Reply

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