Действия с элементами StartMenu

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Действия с элементами StartMenu

Post by buniak_a_h »

Когда-то был плагин NamedFolders& в котором была возможность запуска по ярлыкам из Start Menu Windows, а также переход в папку/к файлу. Плагин перестал работать под Far3, варианты NamedFolders Lite и макрос NamedFolders также не включают эту возможность. Я сделал маленький макрос, реализующий эти возможности. Макрос использует плагин LnkView. Макрос позволяет выполнить ("открыть") ярлык, а в случае, если ярлык указывает на файл/папку, то перейти к расположению объекта. Также, если ярлык указывает на файл, то вызвать редактор/просмотровщик этого файла.
Можно указать шаблон для фильтрации ярлыков.
Макрос не поддерживает переход на "рабочий каталог" ярлыка.
При вызове выводится меню со списком ярлыков, и через разделитель - список вложенных папок. При выборе вложенной папки выводится следующее меню, отражающее ярлыки и папки выбранной папки.
StartMenu.002.7z
Версия 2
(3.96 KiB) Downloaded 65 times
Last edited by buniak_a_h on Tue 13 Nov, 2018 13:16, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Mon 12 Nov, 2018 06:30 Макрос не поддерживает переход на "рабочий каталог" ярлыка.
Почему?
И помимо рабочего каталога ярлык также может содержать аргументы командной строки.
buniak_a_h wrote: Mon 12 Nov, 2018 06:30 Не подскажете, нет ли возможность в функции far.Menu(...) отслеживать перемещение по пунктам МЕНЮ и в зависимости от них запрещать или разрешать BreakKey-и ?
Нет.
Функцию надо (пере)вызывать в цикле, это обычная практика.

P.S.
Заметил, что вы заранее обрабатываете все найденные ярлыки, не излишне ли?
Ведь в итоге выбран будет лишь один.
Last edited by John Doe on Mon 12 Nov, 2018 09:08, edited 2 times in total.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

John Doe wrote: Mon 12 Nov, 2018 08:15 Функцию надо (пере)вызывать в цикле, это обычная практика.
Таким образом кстати можно (и нужно) организовать возможность возврата из вложенных папок, чтобы можно было полноценно просматривать содержание меню.

И ещё пожелание по функцильнальности: раз уж предусмотрен подбор элементов по маске, то в таком случае было бы удобно видеть все подходящие элементы, а не только те что в корне.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Действия с элементами StartMenu

Post by buniak_a_h »

John Doe wrote: Mon 12 Nov, 2018 08:15 buniak_a_h писал(а): ↑Пн 12 ноя, 2018 08:30
Макрос не поддерживает переход на "рабочий каталог" ярлыка.
Почему?
Я не знаком со структурой и терминологией lnk-файлов, а также с командами плагина. В хелпе к нему нет, например, для команды extract квалификатора @Target. Использование плагиа скопипастил из макроса...
John Doe wrote: Mon 12 Nov, 2018 08:15 И помимо рабочего каталога ярлык также может содержать аргументы командной строки.
Знаю. Считайте, что это - ещё одно ограничение. Например, у меня довольно много ярлыков с командной строкой типа %FARHOME%\Far.exe /e D:\Jobs\LastJob.txt . И куда переходить? Запускать даю, а перейти и уж тем более открыть на редактирование/просмотр ну, или нечего, или делать разбор строки. Решил, что пока это - компромисс. Если кто-нить захочет - попробую доделать.
John Doe wrote: Mon 12 Nov, 2018 08:15 Функцию надо (пере)вызывать в цикле, это обычная практика.
Спасибо. Грустно... Есть ещё вариант симулировать far.Menu через far.Dialog. Не первый раз хочется, значит, созрел модуль...
John Doe wrote: Mon 12 Nov, 2018 08:15 Заметил, что вы заранее обрабатываете все найденные ярлыки, не излишне ли?
Ведь в итоге выбран будет лишь один.
Опять спасибо. Эксперимент остался... Переделаю.
John Doe wrote: Mon 12 Nov, 2018 08:41 Таким образом кстати можно (и нужно) организовать возможность возврата из вложенных папок, чтобы можно было полноценно просматривать содержание меню.
Если сделаю через диалог, то для захода во внутреннюю папку тупо буду вызывать другой диалог. И нагляднее будет - видно будет, откуда зашли...
John Doe wrote: Mon 12 Nov, 2018 08:41 И ещё пожелание по функцильнальности: раз уж предусмотрен подброр элементов по маске, то в таком случае было бы удобно видеть все подходящие элементы, а не только те что в корне.
Ок, была мысль сделать как в NamedFolders: если маска начинается с \*\, то искать файл по маске, но во всех папках. Просто конкретно для того, что я часто использую, хватало того, что сделано. Например, на любой ярлык проекта KillCopy можно попасть, указав маску kill. А уже потом споткнулся: как прога называется - помню, а в какой папке - нет. Так что буду доделывать.
Что-то у меня сломалось... Работало и без маски. Перестало. Да и по маске что-то не ищет. Некогда сейчас, извините.
Буду считать, что скрипт, когда будет работать, будет полезен, и доделывать его стоит.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Mon 12 Nov, 2018 11:07 Я не знаком со структурой и терминологией lnk-файлов, а также с командами плагина. В хелпе к нему нет, например, для команды extract квалификатора @Target. Использование плагиа скопипастил из макроса...
Цитирую:

Code: Select all

Для доступа к флагам заголовка, имени таргет-файла и его рабочей директории существуют три специальных запроса:
 "@Flags", "@Target" и "@WorkDir". Эти запросы осуществляют интеллектуальный поиск соответствующей информации в
 LNK-файле.
buniak_a_h wrote: Mon 12 Nov, 2018 11:07 И куда переходить?
А это второстепенный вопрос, рабочий каталог важен прежде всего для запуска програм.
buniak_a_h wrote: Mon 12 Nov, 2018 11:07 Спасибо. Грустно... Есть ещё вариант симулировать far.Menu через far.Dialog.
Почему грустно? Всё что вам надо в цикле прекрасно реализуется.
buniak_a_h wrote: Mon 12 Nov, 2018 11:07 Не первый раз хочется, значит, созрел модуль...
Писал подобный модуль, когда реально не хватило возможностей меню. В вашем случае это излишне.
buniak_a_h wrote: Mon 12 Nov, 2018 11:07 Если сделаю через диалог, то для захода во внутреннюю папку тупо буду вызывать другой диалог.
Для примера: lua explorer прекрасно обходится без.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Действия с элементами StartMenu

Post by buniak_a_h »

John Doe wrote: Mon 12 Nov, 2018 11:31 Цитирую:
КОД: ВЫДЕЛИТЬ ВСЁ

Для доступа к флагам заголовка, имени таргет-файла и его рабочей директории существуют три специальных запроса:
"@Flags", "@Target" и "@WorkDir". Эти запросы осуществляют интеллектуальный поиск соответствующей информации в
LNK-файле.
Спасибо. Не дочитал, видимо.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Mon 12 Nov, 2018 11:07 Буду считать, что скрипт, когда будет работать, будет полезен, и доделывать его стоит.
Вот ещё пара мыслей:
- даже при отстутствии плагина lnkview скрипт будет полезен для запуска ярлыков.
- плагин также умеет работать с Custom Jump Lists, что тоже было бы интересно использовать.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Действия с элементами StartMenu

Post by buniak_a_h »

Вроде, сделал нечто юзабельное... Во всяком случае, я уже пользуюсь - мне удобно.
John Doe, Учёл многие Ваши замечания:
John Doe wrote: Mon 12 Nov, 2018 08:15 buniak_a_h писал(а): ↑Пн 12 ноя, 2018 08:30
Макрос не поддерживает переход на "рабочий каталог" ярлыка.
Почему?
Сделал.
John Doe wrote: Mon 12 Nov, 2018 08:15 Заметил, что вы заранее обрабатываете все найденные ярлыки, не излишне ли?
Ведь в итоге выбран будет лишь один.
Исправил. Хотя, возможно, было бы не лишне искать не только по имени lnk-файла, но и по имени объекта, на который lnk-файл ссылается. Ну, возможно в будущем, если сделаю настройку...
John Doe wrote: Mon 12 Nov, 2018 08:41 Таким образом кстати можно (и нужно) организовать возможность возврата из вложенных папок, чтобы можно было полноценно просматривать содержание меню.
Сделано.
John Doe wrote: Mon 12 Nov, 2018 08:41 удобно видеть все подходящие элементы, а не только те что в корне.
На самом деле ВСЕ элементы показывать наоборот неудобно. Приходится вручную (вГЛАЗную?) искать нужное в очень длинном и широком меню.
Короче, сейчас в выбор включаются непосредственно папки и ярлыки, а также папки, если в них будет найден ярлык по маске на любом уровне вложенности (даже если сама папка маске не соответствует).
John Doe wrote: Mon 12 Nov, 2018 11:59 плагин также умеет работать с Custom Jump Lists, что тоже было бы интересно использовать.
Я не знаю, что такое Custom Jump Lists (даже файлы ли это, или записи в реестре) и не знаю, что надо сделать для работы с ними. Просмотр видео-мануала (на английском, увы! ;-( ) наводит на мысль, что надо ставить ещё какой-то JumpListLauncher.
Если возможно коротко - напишите, пож., что это (если файлы, то как называются и где их искать). Если коротко никак - посоветуйте, где почитать по-русск (кроме MSDN)
P/S. Добавлю-ка я в поиск папку User pinned (потом, если не забуду). Это, вроде, список ярлыков, закреплённых на таскбаре. Хотя в этом большого смысла не вижу: их не много и они видны и кликабельны всё время.
John Doe,
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Tue 13 Nov, 2018 14:09 Я не знаю, что такое Custom Jump Lists
https://electronics_term_en_ru.academic.ru/95/Jump_List
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Recent
Файлы, искать по маске .customDestinations-ms (см. справку плагина).
buniak_a_h wrote: Tue 13 Nov, 2018 14:09 Есть какие-то ограничения в выборе BreakKey
Есть, но в вашем случае скорее всего мешает какой-то макрос.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Tue 13 Nov, 2018 14:09 На самом деле ВСЕ элементы показывать наоборот неудобно. Приходится вручную (вГЛАЗную?) искать нужное в очень длинном и широком меню.
Если задана маска, то меню не будет длинным, и удобнее видеть все элементы в одном списке (кстати, напомню что в любом меню фара доступен фильтр).
buniak_a_h wrote: Tue 13 Nov, 2018 14:09Короче, сейчас в выбор включаются непосредственно папки и ярлыки, а также папки, если в них будет найден ярлык по маске на любом уровне вложенности (даже если сама папка маске не соответствует).
В настоящий момент в список папок попадают подпапки сразу всех уровней, предполагаю что так не задумывалось.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Действия с элементами StartMenu

Post by buniak_a_h »

John Doe wrote: Wed 14 Nov, 2018 09:55
buniak_a_h wrote: Tue 13 Nov, 2018 14:09 На самом деле ВСЕ элементы показывать наоборот неудобно. Приходится вручную (вГЛАЗную?) искать нужное в очень длинном и широком меню.
Если задана маска, то меню не будет длинным, и удобнее видеть все элементы в одном списке (кстати, напомню что в любом меню фара доступен фильтр).
Так не понял - все папки надо (т.к. «список не будет длинным», или только первого уровня?
John Doe wrote: Wed 14 Nov, 2018 09:55
buniak_a_h wrote: Tue 13 Nov, 2018 14:09Короче, сейчас в выбор включаются непосредственно папки и ярлыки, а также папки, если в них будет найден ярлык по маске на любом уровне вложенности (даже если сама папка маске не соответствует).
В настоящий момент в список папок попадают подпапки сразу всех уровней, предполагаю что так не задумывалось.
Да, что-то сломалось. Пусть пока так, потом доделаю.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Wed 14 Nov, 2018 12:00 Так не понял - все папки надо (т.к. «список не будет длинным», или только первого уровня?
Для этого случая папки вообще не надо, только элементы (независимо от уровня вложенности).
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Действия с элементами StartMenu

Post by buniak_a_h »

John Doe wrote: Wed 14 Nov, 2018 12:05 Для этого случая папки вообще не надо, только элементы (независимо от уровня вложенности)
С полным путём - не хотелось. Очень длинные строки получаются.
Только имя файла - файл Readme.txt (например) находится в десятках каталогов, практически во всех установленных продуктах. Как узнать, какой нужен? Значит, путь придётся вставлять.
Кроме того, хотелось иметь возможность "войти" именно в папку (например, в фильтре указать *Office*, зайти в папку LibreOffice и уже там выбрать, что нужно. Такой вариант использования кажется мне наиболее полезным. Т.е. фильтр налагается только на каталоги и непосредственно вложенные ярлыки, а в список включать отфильтрованные ярлыки, непосредственно вложенные в корень, а также папки к отфильтрованным ярлыкам. Но при заходе во вложенную папку фильтр надо снимать. Вот это меня и запутало.
Кстати, пример с *Office* оказался очень интересным: у меня, например, высыпало 2 папки

Code: Select all

╔══════════════ Список ярлыков меню Start ═══════════════╗
╟─────────────────────── Каталоги ───────────────────────╢
║  Programs\LibreOffice 6.1                              ║
║  Programs\WPS Office\Средства WPS Office               ║
╚═ Enter, Ctrl[Shift]PgDn, Ctrl[Shift] ←/→, F3, F4, BS ══╝
А при заходе, например, в первую получаю:

Code: Select all

╔══════════════ Список ярлыков меню Start ═══════════════╗
╟──────────────────────── Ярлыки ────────────────────────╢
║  LibreOffice (Safe Mode).lnk                           ║
║  LibreOffice Base.lnk                                  ║
║  LibreOffice Calc.lnk                                  ║
║  LibreOffice Draw.lnk                                  ║
║  LibreOffice Impress.lnk                               ║
║  LibreOffice Math.lnk                                  ║
║  LibreOffice Writer.lnk                                ║
║  LibreOffice.lnk                                       ║
╚═ Enter, Ctrl[Shift]PgDn, Ctrl[Shift] ←/→, F3, F4, BS ══╝
По-моему, очень удобно... :-)
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Действия с элементами StartMenu

Post by John Doe »

buniak_a_h wrote: Wed 14 Nov, 2018 12:21 С полным путём - не хотелось. Очень длинные строки получаются.
Путь обрезать до общего корня.
buniak_a_h wrote: Wed 14 Nov, 2018 12:21 Кроме того, хотелось иметь возможность "войти" именно в папку
Если в фильтрации путь тоже участвует, то все элементы папки должны попасть в список, т.е. необходимости именно "входить" нет.
buniak_a_h wrote: Wed 14 Nov, 2018 12:21 Но при заходе во вложенную папку фильтр надо снимать.
Я представлял это проще.
Всё сразу фильтруется по заданной маске, которая применяется целиком к пути (возможно, с ограничениями).
Таким образом получается полный и конечный список элементов, с которым и работаем дальше, не думая уже о фильтре.

При этом список можно представлять и вашим способом (с возможностью бродить по структуре), так и моим (одним списком).
(это уж смотрите как удобнее, я лишь идеей поделился)
Post Reply

Return to “Обсуждение макросов”