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

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 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.3.3.0.7z
последняя версия
(14.95 KiB) Downloaded 30 times
CtrlAltMenuDisk2.0.fmlua.7z
Версия 2.0 - последняя fmlua
(1.54 KiB) Downloaded 28 times
CtrlAltMenuDisk1.1.fmlua.7z
Совсем старая версия (1.1) для версий Фара без Mouse.LastCtrlState
(1.62 KiB) Downloaded 23 times
Last edited by IgorZ on Thu 15 Jun, 2017 09:30, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 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: 3045
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 84 times

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

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

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

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

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

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

Разве?

IgorZ
Posts: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 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: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 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: 463
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

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

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

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

User avatar
John Doe
Бюрократ
Posts: 11421
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 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 “Полезные макросы и скрипты”