Переключение дисков по 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.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Latest post of the previous page:

Mauro72 wrote:May be a blank space between drives [C D E F..]?
Only if as option.
Mauro72 wrote:Highlighted the current drive in uppercase, not lowercase.
Similarly.
Mauro72 wrote:And a option to show always the drives in two panels?
Please, more detail.
User avatar
Mauro72
Posts: 220
Joined: Wed 11 Aug, 2010 00:23
Location: Rosario, Argentina
Been thanked: 9 times

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

Post by Mauro72 »

Please, more detail.
Easy, show the drives always, not only when press CTRL (left panel)/ALT (right panel) + arrows.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 3.0.8 - Настройка вывода символов панели с разделением пробелами. Настройка выделения текущего диска нижним регистром. Рефакторинг. Мелкие правки.
Mauro72 wrote:
Please, more detail.
Easy, show the drives always, not only when press CTRL (left panel)/ALT (right panel) + arrows.
No. This drives panels will need to redraw almost every time when FAR panels are redrawn. Before this is necessary to determine, is it really required, or no. All this will increase the load on the system and potentially lower reliability without increasing functionality.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 3.1.0 - Более гибкая настройка управления. Переработана справка.

Теперь можно назначать переключение любой панели на любые комбинации -> и <- с модификаторами. Ну и справка заодно приведена в соответствие с возможностями скрипта и переведена на стандартный механизм.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 3.1.1 - Мелкие правки. Изменены символы для обозначения плагинов, добавляющихся к списку дисков по умолчанию - оказывается, в каких-то случаях те, что были, могут приводить к ошибкам. Исправлен непереведённый с русского фрагмент в английской справке. Собственно, те, кто не пользуются английской справкой и уже переназначили обозначения плагинов, как им удобно, могут не беспокоиться.
Заодно причесал головной пост - устаревшие варианты скрипта формата .fmlua выкинул из текста, заменив на вложения.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 3.2.0 -
  • Максимально гибкая настройка управления. Теперь можно указывать любые комбинации, вплоть до (к примеру) AltShiftQ для левой панели и RCtrlRAltShiftW для правой. Вроде, за время тестирования все ошибки выловлены, но поскольку возможны скрытые камни в связи с какими-то комбинациями клавиш, на всякий случай пусть полежит и предыдущая версия.
  • Смена места хранения данных. Внимание: в связи с данным новшеством рекомендую перенести настройки скрипта при помощи специальной утилиты. Хотя, в принципе, должен и старые настройки находить, если новых нет. Но не гарантирую, что в любых обстоятельствах, и что так будет и в последующих версиях.
  • Мелкие правки.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 3.3.0 - Диски и плагины можно назначать на разные комбинации. После смены клавиш скрипты перезагружаются (чтобы обновить клавиши вызова макроса). Убрана область Menu из определения пункта меню плагинов. При выводе справки используется язык справки фара. Справка допилена. Nfo. Мелкие правки.
Поясню подробнее насчёт "Диски и плагины можно назначать на разные комбинации". В настройках можно указывать, какими клавишами переключать диски и плагины, к примеру

Code: Select all

║ 1 Левая Ctrl RAlt          3 Активная Shift              ║
║ 2 ПраваяAlt RCtrl          4 Пассивная                   ║
║ 5 <--   Left               6 -->      Right              ║
Теперь можно написать

Code: Select all

║ 1 Левая Ctrl RAlt          3 Активная Shift              ║
║ 2 ПраваяAlt RCtrl          4 Пассивная                   ║
║ 5 <--   \dNum7 \pNum1 Num4 6 -->      \dNum9 \pNum3 Num6 ║
Тогда пара Num7/Num9 будет выводить и, соответственно, переключать только диски, пара Num1/Num3 только плагины, а пара Num4/Num6, как и раньше, и те, и другие. В качестве признаков используются \d/\D и \p/\P.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 3.3.1 -
  • Нажатие буквы диска/символа плагина перемещает курсор в панели. К примеру, если скрипт активирован с помощью комбинации Ctrl+что-то, то CtrlC переместит курсор на диск C, а нажатие Ctrl/ переместит курсор на плагин, обозначенный символом / . Разумеется, не всякий символ получится так ввести, к примеру, Ctrl? не выйдет, только Ctrl/.
  • Изменён способ выделения начального диска в панели, на пробу. На схеме по умолчанию, во всяком случае, видно гораздо лучше, поскольку используется окраска с другим цветом фона. Раньше использовался цвет выделенного файла в панели, у которого фон, как правило, совпадает с фоном обычного файла, поэтому видно было не очень хорошо.
  • Рефакторинг, мелкие правки. В частности, теперь назначение на плагин русской буквы отрабатывает, вроде бы, полностью корректно.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

На мой взгляд, макрос стал почти идеальным.
Однако всегда ведь есть возможность совершенствования. В частности:
IgorZ wrote: Fri 08 Dec, 2017 10:03
  • Изменён способ выделения начального диска в панели, на пробу...
Это очень хорошо. При этом, было бы предпочтительнее, чтобы курсор на позиции начального диска обозначался бы подсветкой также, как и на других позициях.

А так же было бы хорошо, чтобы меню можно было бы выводить не в одной позиции, а одновременно в двух (например, в самой верхней — 0 и в самой нижней — -1).
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

sToLp wrote: Sun 10 Dec, 2017 17:27 На мой взгляд, макрос стал почти идеальным.
Однако всегда ведь есть возможность совершенствования. В частности:
IgorZ wrote: Fri 08 Dec, 2017 10:03
  • Изменён способ выделения начального диска в панели, на пробу...
Это очень хорошо. При этом, было бы предпочтительнее, чтобы курсор на позиции начального диска обозначался бы подсветкой также, как и на других позициях.
Не совсем понял, что имеется в виду. Подсветка текущего диска должна обладать бОльшим приоритетом, чем подсветка начального? То есть, если курсор текущей позиции стоит на начальном диске, то отмечать его не как начальный диск, а как текущую позицию? Если да, поменяйте в файле местами строки 408 и 409, то есть

Code: Select all

    far.Text(PanelPos+DrvNum+(SpDelim and DrvNum-1 or 0),OutStr,SelColor,DrvList:sub(DrvNum,DrvNum)) -- и курсор
и

Code: Select all

    far.Text(StartOut,OutStr,StartColor,DrvList:sub(StartDrv,StartDrv)) -- и стартовый диск
Кстати, если большинство считает аналогично, то поменяю в дистрибутиве - мне без особой разницы.
sToLp wrote: Sun 10 Dec, 2017 17:27А так же было бы хорошо, чтобы меню можно было бы выводить не в одной позиции, а одновременно в двух (например, в самой верхней — 0 и в самой нижней — -1).
Зачем??? :?
Last edited by IgorZ on Mon 11 Dec, 2017 07:59, edited 1 time in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Mon 11 Dec, 2017 07:55
sToLp wrote: Sun 10 Dec, 2017 17:27было бы предпочтительнее, чтобы курсор на позиции начального диска обозначался бы подсветкой также, как и на других позициях
Не совсем понял, что имеется в виду.
При прокрутке курсора по меню, когда он попадает вновь на начальный диск, то не подсвечивается (как бы пропадает) и становится непонятным: где же курсор в этот момент?

Дополнено:
Предложенный Вами вариант смены указанных строк местами данную задачу решает. Спасибо!

IgorZ wrote: Mon 11 Dec, 2017 07:55
sToLp wrote: Sun 10 Dec, 2017 17:27А так же было бы хорошо, чтобы меню можно было бы выводить не в одной позиции, а одновременно в двух (например, в самой верхней — 0 и в самой нижней — -1).
Зачем??? :?
По нынешним временам мониторы бывают большими (и даже очень большими) и на них удобнее были бы дублированные меню.


А также (если это возможно и не слишком обременительно) было бы удобно, чтобы меню могло бы постоянно оставаться на экране и, кроме прочего, переключение можно было бы осуществлять кликом мыши. :oops:
Last edited by sToLp on Mon 11 Dec, 2017 10:24, edited 1 time in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

sToLp wrote: Mon 11 Dec, 2017 09:24
IgorZ wrote: Mon 11 Dec, 2017 07:55
sToLp wrote: Sun 10 Dec, 2017 17:27А так же было бы хорошо, чтобы меню можно было бы выводить не в одной позиции, а одновременно в двух (например, в самой верхней — 0 и в самой нижней — -1).
Зачем??? :?
По нынешним временам мониторы бывают большими (и даже очень большими) и на них удобнее были бы дублированные меню.
Пока предложу патч, который выводит меню фиксированно в первой и последней строке. Две настраиваемые позиции потребуют переработки настроек, переделки окна конфигурации - в общем, долго и нудно. А кроме Вас, пока никто не возжелал два экземпляра панели.
Так что строки 407-409 (три far.Text(...)) замените на
  1.     far.Text(PanelPos,0,StdColor,"["..OutList.."]") -- отрисуем список дисков
  2.  
  3.     far.Text(StartOut,0,StartColor,DrvList:sub(StartDrv,StartDrv)) -- и стартовый диск
  4.  
  5.     far.Text(PanelPos+DrvNum+(SpDelim and DrvNum-1 or 0),0,SelColor,DrvList:sub(DrvNum,DrvNum)) -- и курсор
  6.  
  7.     far.Text(PanelPos,WPanel.Height-1,StdColor,"["..OutList.."]") -- отрисуем список дисков
  8.  
  9.     far.Text(StartOut,WPanel.Height-1,StartColor,DrvList:sub(StartDrv,StartDrv)) -- и стартовый диск
  10.  
  11.     far.Text(PanelPos+DrvNum+(SpDelim and DrvNum-1 or 0),WPanel.Height-1,SelColor,DrvList:sub(DrvNum,DrvNum)) -- и курсор
sToLp wrote: Mon 11 Dec, 2017 09:24А также (если это возможно и не слишком обременительно) было бы удобно, чтобы меню могло бы постоянно оставаться на экране и, кроме прочего, переключение можно было бы осуществлять кликом мыши. :oops:
Для этого надо перехватывать события панели: перерисовку и ввод. События консольного ввода скрипт может получать, а события перерисовки панели - нет. Только плагин.
Возможно, Вам для Ваших нужд подойдёт плагин PanelTabs? Фактически, он является реализацией Вашей идеи, доведённой до логического конца.
Или :twisted: TotalCommander...
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

IgorZ wrote: Fri 15 Dec, 2017 07:26События консольного ввода скрипт может получать, а события перерисовки панели - нет. Только плагин.
И плагин эти события не получает, если только панель не создана этим самым плагином.
В контексте данного обсуждения - никакой разницы между возможностями макроса и плагина.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

IgorZ wrote: Fri 15 Dec, 2017 07:26патч, который выводит меню фиксировано в первой и последней строке
...
строки 407-409 (три far.Text(...)) замените на
  1.     far.Text(PanelPos,0,StdColor,"["..OutList.."]") -- отрисуем список дисков
  2.  
  3.     far.Text(StartOut,0,StartColor,DrvList:sub(StartDrv,StartDrv)) -- и стартовый диск
  4.  
  5.     far.Text(PanelPos+DrvNum+(SpDelim and DrvNum-1 or 0),0,SelColor,DrvList:sub(DrvNum,DrvNum)) -- и курсор
  6.  
  7.     far.Text(PanelPos,WPanel.Height-1,StdColor,"["..OutList.."]") -- отрисуем список дисков
  8.  
  9.     far.Text(StartOut,WPanel.Height-1,StartColor,DrvList:sub(StartDrv,StartDrv)) -- и стартовый диск
  10.  
  11.     far.Text(PanelPos+DrvNum+(SpDelim and DrvNum-1 or 0),WPanel.Height-1,SelColor,DrvList:sub(DrvNum,DrvNum)) -- и курсор
Большое спасибо! Патч работает как запрошено. С одним небольшим нюансом: после выбора пункта меню верхнее меню продолжает оставаться на панели, т.е. не перерисовывается.

IgorZ wrote: Fri 15 Dec, 2017 07:26Возможно, Вам для Ваших нужд подойдёт плагин PanelTabs? Фактически, он является реализацией Вашей идеи, доведённой до логического конца.
PanelTabs использую активно, практически постоянно. Он очень удобен. И хотелось бы, чтобы он оставался дееспособным и дальше. Однако альтернатива не помешала бы.

Кстати, в Far x86 пока так же продолжает работать подплагин плагина scrgadget — "Экранные гаджеты". Он выводит в начало третьих снизу строк панелей Far`а литеры дисков, удобные для их переключения мышью. Но этот плагин не работает в x64. И здесь альтернатива была бы весьма желательна.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

sToLp wrote: Fri 15 Dec, 2017 11:24 Большое спасибо! Патч работает как запрошено. С одним небольшим нюансом: после выбора пункта меню верхнее меню продолжает оставаться на панели, т.е. не перерисовывается.
Недоработка. Тогда еще одна модификация: строку 397

Code: Select all

local h = far.SaveScreen(PanelPos,OutStr,PanelPos+OutList:len()+2,OutStr) -- сохраним фрагмент экрана, на котором будем рисовать панель смены диска
меняем на

Code: Select all

local h = far.SaveScreen() -- сохраним весь экран, не мелочимся
Post Reply

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