Переключение дисков по 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 254 times
Last edited by IgorZ on Wed 30 Dec, 2020 09:09, edited 10 times 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 »

Latest post of the previous page:

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: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 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() -- сохраним весь экран, не мелочимся
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.2 - Внезапно совпало наличие свободного времени, интереса и идеи по способу реализации, так что теперь можно указывать несколько строк вывода, панель будет выводиться в каждой. В настройках пишем несколько строк через , или ;, например 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 »

Здравствуйте, де
...
Хо-хо-х
...
В общем, вот вам мой новогодний подарок.
Версия 4.0.0 - Панели переключения могут быть постоянными и всплывающими при наведении мыши. Рефакторинг.
По умолчанию режим отключен - не стоит лишний раз грузить систему. Желающие входят в меню настроек и устанавливают переключатель "Включить постоянные панели" (AltN). После этого панели активизируются. При наведении мыши в область мини-панели она становится видимой (только если панель Far включена). При нажатии мышью на букву диска или символ плагина происходит переход. Особо желающие могут включить зависимый переключатель "Выводить всегда" (AltM). Тогда мини-панели будут показываться всегда, даже при отключенных панелях Far.
Предупреждение: несколько раз эта опция завешивала у меня Far. Правда, это было под Wine. Отловить причину пока не удалось. Так что будьте осторожны.
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 29 Dec, 2017 14:10В общем, вот вам мой новогодний подарок.
Версия 4.0.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 »

Версия 4.0.1 - Укрощение курсора в поле "Диски, исключаемые из списка" диалога настроек. Укрощение не 100%-е, поскольку список сортируется и проверяется на недопустимые символы. Кого не волнует, что курсор в этом поле раньше после каждого изменения перескакивал в конец списка, можете игнорировать эту версию.
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 05 Jan, 2018 14:51Версия 4.0.1 - Укрощение курсора в поле "Диски, исключаемые из списка" диалога настроек.
Большое спасибо! Так макрос ещё лучше!

А поскольку совершенствовать можно любое, даже самое совершенное (как данный макрос), произведение, то, в надежде на энтузиазм автора, предлагаю Вашему вниманию 2 хотелки:

1. Располагать меню макроса в верхней позиции наиболее удобно, на мой взгляд, на стоке 1 (т.е. на второй сверху при отсчёте от 0). При этом, при постоянном выводе меню оно перекрывает односимвольный значок, расположенный в самой левой позиции данной строки. Тот значок, который обозначает режим сортировки в панели и при клике на который мышкой вызывается штатное меню выбора дисков. (При отключённой опции "[ ] Выводить всегда" этот значок, если приноровиться, остаётся доступным.)
Желателен бы отступ меню макроса (предпочтительно в 2 знака) от левого края, чтобы и при постоянном выводе меню этот значок оставался бы доступен тоже.

2. Вторая хотелка значительно более сложная: а нельзя ли перечень символов дисков сделать автоматическим? Т.е. чтобы при подключении/отключении дисков соответствующие им буквы появлялись/исчезали сами. Как в штатном меню выбора дисков. Это особенно существенно при работе с портабельным Far`ом, переносимом на сменных носителях. Так как на разных компьютерах буквы дисков (в т.ч. одних и тех же) могут заметно отличаться и динамически изменяться.
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 05 Jan, 2018 16:58
IgorZ wrote: Fri 05 Jan, 2018 14:51Версия 4.0.1 - Укрощение курсора в поле "Диски, исключаемые из списка" диалога настроек.
Большое спасибо! Так макрос ещё лучше!

А поскольку совершенствовать можно любое, даже самое совершенное (как данный макрос), произведение, то, в надежде на энтузиазм автора, предлагаю Вашему вниманию 2 хотелки:

Сделать горизонтальный отступ не фиксированным, а настраиваемым? Логичная идея, запишу себе на будущее.
sToLp wrote: Fri 05 Jan, 2018 16:58
А у Вас он не автоматический??? При подключении диска (например, флешки) он появляется в списке, при отключении - исчезает. Список исключаемых дисков, если что, нужен только для тех дисков, которые есть в системе, но видеть в панели скрипта их не хочется.
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 12 Jan, 2018 05:36Сделать горизонтальный отступ не фиксированным, а настраиваемым? Логичная идея, запишу себе на будущее.
Спасибо!
IgorZ wrote: Fri 12 Jan, 2018 05:36А у Вас он не автоматический??? При подключении диска (например, флешки) он появляется в списке, при отключении - исчезает. Список исключаемых дисков, если что, нужен только для тех дисков, которые есть в системе, но видеть в панели скрипта их не хочется.
Большое спасибо за разъяснение! Оказывается, моя хотелка №2 была уже реализована, а я об этом и не подозревал. Вероятно, из-за какого-то моего косяка с настройкой прежних версий макроса.

Дело в том, что при первоначальной настройке новой версии макроса в поле "Диски, исключаемые из списка" диалога "Конфигурация" почему-то высвечивалось 26 литер: ABCDEFGHIJKLMNOPQRSTUVWXYZ. И я, как теперь понимаю, ошибочно, полагал, что это забито в макросе по умолчанию. И поэтому чтобы литера диска появлялась в меню макроса, мне приходилось исключать её из этого перечня. В т.ч. для каждой вновь вставляемой флешки. После же Вашего разъяснения обнулил содержание поля, сохранил конфигурацию Far`а, и теперь всё стало так, как надо.

Респект и уважение!
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Версия 4.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 »

В связи с тем, что, как выяснилось, far.FreeSettings закрывает открытые настройки не для текущего скрипта, а глобально, выкладываю версию с исправлениями. Версия 4.1.1 -
  • Исправлена подсказка для конфигурации. Вместо "Конфигурация" писало "Справка".
  • far.FreeSettings() заменён на <settings>:Free()
  • Прочий рефакторинг, делавшийся потихоньку.
jazzz
Posts: 3
Joined: Mon 25 Nov, 2019 11:04
Has thanked: 3 times

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

Post by jazzz »

скачал zip, распаковал \Far\Addons\Macros\CtrlAltMenuDisk, но макрос не работает, вместо смены дисков меняется ширина панелей.
что не так? спасибо за помощь.
Post Reply

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