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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby 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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby 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: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Postby 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: 2900
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

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

Postby 2useven10 » Mon 04 Feb, 2013 18:21

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

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

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

Postby John Doe » Mon 04 Feb, 2013 19:28

Разве?

IgorZ
Posts: 436
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 5 times
Been thanked: 8 times

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

Postby 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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby 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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby 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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Tue 05 Feb, 2013 14:15

IgorZ wrote: Лично я кучу лет пользовал плангин и сознательно делал макрос под те же комбинации клавиш.
Я плагином не пользовался, но судя по readme.txt там очень гибкая конфигурация, в частности есть это:

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

IgorZ
Posts: 436
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 5 times
Been thanked: 8 times

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

Postby 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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Wed 06 Feb, 2013 10:00

IgorZ wrote:
John Doe wrote:Есть мнение, что если погашены обе панели (CtrlO), то и включать лучше обе.

Вот тут не согласен. Если панели выключены, значит, это зачем-то нужно.
Я немного о другом.

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

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

IgorZ
Posts: 436
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 5 times
Been thanked: 8 times

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

Postby 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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby 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+<-/->

Postby ur4ltz » Wed 06 Feb, 2013 22:29

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


И это правильно сделано!
А если я просто забыл что тут макрос сидит? А не сдвиг размера панелей делал?
НЕ НУЖНО вешать макросы на стандартные сочетания клавиш!!

IgorZ
Posts: 436
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 5 times
Been thanked: 8 times

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

Postby 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: 436
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 5 times
Been thanked: 8 times

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

Postby IgorZ » Fri 05 Apr, 2013 04:17

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

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

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

Postby 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


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

Who is online

Users browsing this forum: No registered users and 1 guest