Page 9 of 11

Менеджер закладок для папок

Posted: Fri 24 Jan, 2014 09:51
by IgorZ
Данный скрипт позволяет назначать на папки и файлы закладки (закладка может содержать ссылки как на одну, так и на несколько целей, для разных панелей; подробнее во встроенной справке скрипта) и переходить по ним (или запускать их средствами ОС), а также по переменным окружения, содержащим пути. Идея взята у Shell Bookmark (с) Max Rusov, текст написан с нуля.
Скрипт содержит три макроса.
  • Сохранение текущей папки в новой закладке.
    Клавиша вызова: RCtrl+Shift/RAlt+последовательность клавиш.
  • Переход по закладке.
    Клавиша вызова: RCtrl+последовательность клавиш.
  • Меню закладок и настроек.
    Клавиша вызова: RCtrl+/.

Требуемая версия Far 3.0.4324+.


Менеджер закладок для папок

Posted: Fri 05 Jan, 2018 09:03
by Volodya

Latest post of the previous page:

Установил макрос в %FARPROFILE%\Macros\scripts\BM\
Посмотрел из меню дисков BookmarkManager меню.
Посмотрел help по bmhlep:
Добавил закладку командой:
bmag:qwe D:\foo\bar\
Попытался ещё раз посмотреть BookmarkManager меню.
Получил
╔══════════════════════════════════════════════════════════════════ Error ══════════════════════════════════════════════════════════════════╗
║ C:\Program Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro.dll: ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:196: attempt to concatenate a nil value ║
║ stack traceback: ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:196: in function 'BM2str' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:227: in function 'NiceFolder' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:514: in function 'fill_menu' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:528: in function 'BMMenu' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:638: in function 'action' ║
║ ...am Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro.lua:442: in function <...am Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro. ║
║ lua:396> ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Windows Version 10.0.16299.125 x64
Far 3.0.5119 x86
BookmarkManager 2.5.3.7

Что я делаю не так?

Менеджер закладок для папок

Posted: Fri 05 Jan, 2018 13:54
by IgorZ
Volodya wrote:
Fri 05 Jan, 2018 09:03


Что я делаю не так?
Заставляете ленивого автора на каникулах :beer: :popcorn: :angel: заниматься поиском :Search: и правкой :hacking: мелких ошибок. :shit:
Версия 2.5.4 - Работа над ошибками.

P. S. Всем советую закладки, сделанные версией 2.5.3, проверить на корректность наличия модификатора "C". Мог ставиться туда, где не должен быть, и наоборот.

Менеджер закладок для папок

Posted: Fri 05 Jan, 2018 18:25
by Volodya
Версия 2.5.4
Нажимаю Rctrl\
Получаю
╔════════════════════════════════════════════════════════════════ LuaMacro ═════════════════════════════════════════════════════════════════╗
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:197: attempt to concatenate a nil value ║
║ stack traceback: ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua: in function 'BM2str' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:228: in function 'NiceFolder' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:515: in function 'fill_menu' ║
║ ...ar Manager\Profile\Macros\scripts\BM\BookmarkManager.lua:529: in function <...ar Manager\Profile\Macros\scripts\BM\BookmarkManager. ║
║ lua:462> ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Вопрос тот же. ЧЯДНТ?

Менеджер закладок для папок

Posted: Fri 12 Jan, 2018 05:26
by IgorZ
Volodya wrote:
Fri 05 Jan, 2018 18:25
Версия 2.5.4
Нажимаю Rctrl\
Получаю

Вопрос тот же. ЧЯДНТ?
Некорректно сохранившаяся закладка осталась (тут я недодумал в прошлый раз). Для исправления ситуации можно строку 197

Code: Select all

  s = s..(f.CD and (f.Panel:match("(<.*)>").."C>") or f.Panel)..f.Plugin.."|"..f.File.."|"..f.Folder.."|"..f.Param
исправить на

Code: Select all

  s = s..(f.CD and f.Panel~="" and (f.Panel:match("(<.*)>").."C>") or f.Panel)..f.Plugin.."|"..f.File.."|"..f.Folder.."|"..f.Param
После этого запустить скрипт, удалить эту закладку и работать дальше.
Это самый простой способ. Или же можно удалить или изменить вручную закладку с помощью дополнительных инструментов, таких как SQLiteDB или Редактор БД плагинов. Это несколько сложнее, но если есть желание, надо параметр CD у соответствующей закладки изменить с 1 на 0.

P. S. Для цитирования диалогов с сообщениями об ошибках и т. п. советую использовать тег code - выглядит намного аккуратнее и читается легче.

Менеджер закладок для папок

Posted: Thu 26 Apr, 2018 21:27
by buniak_a_h
IgorZ, если Вы ещё не забросили тему, есть пара пожеланий.
Ваш скрипт очень похож по функционалу на плагин NamedFolders.
  • Хочется иметь возможность указывать не целиком имя подкаталога, а маску или начало. Например, в каталоге D:\Root, занесённом в закладку ROOT, есть подкаталоги SYSTEM и несколько каталогов вида SAVE_01, SAVE_02... . Хотелось бы иметь возможность перейти командой BM:\ROOT\SY сразу на SYSTEM (т.к. он - единственный, подходящий по маске), а по команде BM:ROOT\SA* (или без звёздочки) - получить МЕНЮ со всеми подкаталогами D:\Root\SAVE_*.
  • Из той же темы: хотелось бы иметь возможность и в качестве диска указывать "*" (*:\Root).
  • Если после "\" указано имя не каталога, а файла, то позиционироваться на этом файле. Думаю, это - совсем просто.
  • Задачка сложнее, но была очень удобной в старом Named Folders: кроме Environment-переменных в список добавить папки, на которые ссылаются элементы главного меню. В NamedFolders была даже возможность не просто переходить в папку, а ещё и запускать приложение. Это было бы вообще идеально, но я понимаю, что это уж совсем много хочу...

Менеджер закладок для папок

Posted: Sun 29 Apr, 2018 02:29
by buniak_a_h

Менеджер закладок для папок

Posted: Sun 29 Apr, 2018 12:22
by buniak_a_h

Менеджер закладок для папок

Posted: Tue 01 May, 2018 21:13
by buniak_a_h
Суммирую мои посты в один.
Итак, отличия от авторской версии:
  • Добавлена возможность указания wildcard ("*", "?") для "внутренних" (промежуточных) каталогов пути (для файловых панелей)
  • Добавлена возможность указывать в качестве имени диска выражения типа "*:" и "[C-Q]:" (регэкспы в формате FAR Manager-а)
  • добавлена возможность указывать в качестве целевого объекта не только папки, но и файлы. При этом выводится меню для выбора объекта даже если этот объект - единственный. Если выбрать файл [Enter]-ом, то происходит позиционирование на файле; если [Ctrl+PgDn], то открытие выбранного файла ассоциированной в системе программой; если [F4] - то ассоциированным в системе редактором.
  • Добавлена возможность указывать в пути "родительский" каталог (".."). Так, стало возможным при наличии закладки PLUGIN=%FARHOME%\Plugins переходить на каталог %FARHOME%\Encyclopedia введя команду bm:Plu\..\enc.
  • Добавлена возможность перехода даже не по закладкам, а по переменным окружения. Например, в каталоге %TEMP% имеются подкаталоги 180429, 180430, ... Команда bm:%temp%\18 выведет меню со списком подкаталогов (а, возможно, и файлов) с именами, начинающимися с 18, а команда bm:%path%\delphi32.exe найдёт файл delphi32.exe аналогично команде whereis:delphi32.exe
  • Добавлен интерфейсный режим работы с закладками. Предусмотрено два диалога: диалог сохранения закладок
    Image
    и диалог перехода на закладку
    Image
  • В диалоге сохранения закладки есть возможность указать, какую панель сохранять. возможен один из двух вариантов:
    • Активную и/или пассивную.
    • Левую и/или правую.
    Таким образом можно указать сохранение контекста (за исключением CurPos на
    панелях. Это - в планах).
Есть новости

Менеджер закладок для папок

Posted: Thu 03 May, 2018 12:09
by IgorZ
buniak_a_h wrote:
Thu 26 Apr, 2018 21:27
IgorZ, если Вы ещё не забросили тему, есть пара пожеланий.
Ваш скрипт очень похож по функционалу на плагин NamedFolders.
  • Хочется иметь возможность указывать не целиком имя подкаталога, а маску или начало. Например, в каталоге D:\Root, занесённом в закладку ROOT, есть подкаталоги SYSTEM и несколько каталогов вида SAVE_01, SAVE_02... . Хотелось бы иметь возможность перейти командой BM:\ROOT\SY сразу на SYSTEM (т.к. он - единственный, подходящий по маске), а по команде BM:ROOT\SA* (или без звёздочки) - получить МЕНЮ со всеми подкаталогами D:\Root\SAVE_*.
  • Из той же темы: хотелось бы иметь возможность и в качестве диска указывать "*" (*:\Root).
  • Если после "\" указано имя не каталога, а файла, то позиционироваться на этом файле. Думаю, это - совсем просто.
  • Задачка сложнее, но была очень удобной в старом Named Folders: кроме Environment-переменных в список добавить папки, на которые ссылаются элементы главного меню. В NamedFolders была даже возможность не просто переходить в папку, а ещё и запускать приложение. Это было бы вообще идеально, но я понимаю, что это уж совсем много хочу...
В принципе, возможно почти всё, а тему я не забросил. Просто всё свободное время пилил LuaManager.
С NamedFolders не знаком, поэтому любые хотелки должны быть описаны точно, иначе может быть сделано совсем другое.
Теперь о Ваших изменениях.
1. Я, честно говоря, в шоке. BookmarkManager прекрасно понимает переменные окружения в качестве имён закладок. Для примера можно набрать, скажем, bm:FARHOME<Enter>. Это и описано в справке, и отчётливо видно в изменяемом Вами коде. Так что зачем было добавлять обработку имён переменных в %-ах - совершенно непонятно.
2. Выведение меню в случае, когда закладка набрана неполностью, даже если в меню всего один пункт - совершенно сознательное решение. Меняться оно не будет. Максимум - можно добавить соответствующую настройку - выводить или переходить сразу.
3. Дополнительные макросы - в отдельный файл. Тем более, такие, которые дублируют уже имеющуюся функциональность. Если надо, могу дать программный интерфейс, чтоб из своего файла вызывать BookmarkManager.
Остальное пока внимательно посмотреть не успел.

Менеджер закладок для папок

Posted: Thu 03 May, 2018 13:06
by buniak_a_h
IgorZ wrote:
Thu 03 May, 2018 12:09
1. Я, честно говоря, в шоке. BookmarkManager прекрасно понимает переменные окружения в качестве имён закладок. Для примера можно набрать, скажем, bm:FARHOME<Enter>. Это и описано в справке, и отчётливо видно в изменяемом Вами коде. Так что зачем было добавлять
Попробуйте набрать bm:path\notepad.exe. С моим функционалом (команда bm:%path%\notepad.exe) - найдёт. А требование указания переменной среды в виде %name% произошло из-за того, что Ваш скрипт искал в них только в случае включения UseEnv, а при этом в меню выбора закладки (в том, что вызывается про RCtrl/) добавляется дикое количество пунктов. И мешает визуальному поиску, и время занимает заметное (как ни странно...)
IgorZ wrote:
Thu 03 May, 2018 12:09
2. Выведение меню в случае, когда закладка набрана неполностью, даже если в меню всего один пункт - совершенно сознательное решение. Меняться оно не будет. Максимум - можно добавить соответствующую настройку - выводить или переходить сразу.
С настройкой - было бы хорошо. Лишние диалоги сильно раздражают.
IgorZ wrote:
Thu 03 May, 2018 12:09
3. Дополнительные макросы - в отдельный файл. Тем более, такие, которые дублируют уже имеющуюся функциональность.
Если под дублирующими макросами Вы имеете в виду диалоги, то я поясню. Набор "вслепую" имени закладки левой рукой (правая держит RCtrl), да ещё в относительно быстром темпе (я знаю, что таймаут можно увеличить. Но это всё равно неудобно), для правши - задача совершенно неразрешимая. Один-два символа ещё можно ввести; больше - сбиваешься (я знаю, что клавиши также можно поменять, но это всё равно неудобно: у меня уже почти не осталось горячих кнопок). А набор в командной строке "захламляет" историю команд. Сначала именно поэтому я и доделал диалоги. Потом нашёл возможность в диалоге сохранения закладки указать, какую конкретно панель запоминать (т.е. вообще можно запомнить контекст обеих панелей!) И для меня это оказалось полезным.
IgorZ wrote:
Thu 03 May, 2018 12:09
Если надо, могу дать программный интерфейс, чтоб из своего файла вызывать BookmarkManager.
1. Вы сможете реализовать поиск (а) с wildcard-ами как в промежуточных папках, так и в последней? А также указание имени диска в виде *: или в виде регэкспа типа [d-f]: ? И поиск по списку вариантов, разделённых ";" (как в path)?
2. Вы сможете предоставить в интерфейсе сохранения закладок (функция BMSaveFolder) также и признак, какие панели сохранять?
3. Вы можете сделать так, чтобы если закладка (с учетом дополнения trail) указывает на файл, а не на папку, то происходило позиционирование на объекте, а не вход в папку?

Если всё это будет реализовано - мне хватит и интерфейса к функциям CLProc (или GoToFolder, если указанные в пунктах 1 и 3 изменения будут реализованы в ней) и BMSaveFolder.
Короче, если Вы против моих изменений, я убираю свои посты и пользуюсь моими переделками "индивидуально". Только скажите.

Менеджер закладок для папок

Posted: Thu 03 May, 2018 13:33
by HaRT
buniak_a_h wrote:
Thu 03 May, 2018 13:06
я убираю свои посты и пользуюсь моими переделками "индивидуально"
Посты лучше оставьте. И даже если не найдёте общего языка с автором скрипта, всегда можете форкнуть (надеюсь, лицензия это не запрещает).

Менеджер закладок для папок

Posted: Thu 03 May, 2018 14:09
by John Doe
HaRT wrote:
Thu 03 May, 2018 13:33
Посты лучше оставьте.
Там 3 поста с вложениями, два первых вложения точно не нужны.

Менеджер закладок для папок

Posted: Thu 03 May, 2018 19:17
by buniak_a_h
HaRT,
John Doe wrote:
Thu 03 May, 2018 14:09
два первых вложения точно не нужны
У меня, видимо, не хватает прав для удаления моих же постов... Я все изменения просуммировал в последнем; первые два с вложениями уберите, пожалуйста...

Менеджер закладок для папок

Posted: Thu 03 May, 2018 19:21
by Shmuel
buniak_a_h, посты удалять нельзя, если они не последние в теме, но редактировать их и удалять из них вложения можно.

Менеджер закладок для папок

Posted: Thu 03 May, 2018 19:30
by buniak_a_h
Shmuel, оффтопик.

Менеджер закладок для папок

Posted: Thu 03 May, 2018 19:34
by HaRT

Менеджер закладок для папок

Posted: Fri 04 May, 2018 05:48
by IgorZ
buniak_a_h wrote:
Thu 03 May, 2018 13:06
IgorZ wrote:
Thu 03 May, 2018 12:09
1. Я, честно говоря, в шоке. BookmarkManager прекрасно понимает переменные окружения в качестве имён закладок. Для примера можно набрать, скажем, bm:FARHOME<Enter>. Это и описано в справке, и отчётливо видно в изменяемом Вами коде. Так что зачем было добавлять
Попробуйте набрать bm:path\notepad.exe. С моим функционалом (команда bm:%path%\notepad.exe) - найдёт. А требование указания переменной среды в виде %name% произошло из-за того, что Ваш скрипт искал в них только в случае включения UseEnv, а при этом в меню выбора закладки (в том, что вызывается про RCtrl/) добавляется дикое количество пунктов. И мешает визуальному поиску, и время занимает заметное (как ни странно...)
С функционалом понятно, его я ещё толком не смотрел, но идея неплохая.
А вот то, что вывод переменных в меню мешает - удивило. Впрочем, восприятие - дело индивидуальное. Так что, думаю, не будет ничего плохого, если UseEnv будет влиять только на отображение переменных в меню, а использовать их с клавиатуры или с префиксом можно будет всегда. Наверное, так и сделаю. Или же, добавлю отдельную настройку для отображения.
buniak_a_h wrote:
Thu 03 May, 2018 13:06
IgorZ wrote:
Thu 03 May, 2018 12:09
2. Выведение меню в случае, когда закладка набрана неполностью, даже если в меню всего один пункт - совершенно сознательное решение. Меняться оно не будет. Максимум - можно добавить соответствующую настройку - выводить или переходить сразу.
С настройкой - было бы хорошо. Лишние диалоги сильно раздражают.
Договорились.
buniak_a_h wrote:
Thu 03 May, 2018 13:06
IgorZ wrote:
Thu 03 May, 2018 12:09
3. Дополнительные макросы - в отдельный файл. Тем более, такие, которые дублируют уже имеющуюся функциональность.
Если под дублирующими макросами Вы имеете в виду диалоги, то я поясню. Набор "вслепую" имени закладки левой рукой (правая держит RCtrl), да ещё в относительно быстром темпе (я знаю, что таймаут можно увеличить. Но это всё равно неудобно), для правши - задача совершенно неразрешимая. Один-два символа ещё можно ввести; больше - сбиваешься (я знаю, что клавиши также можно поменять, но это всё равно неудобно: у меня уже почти не осталось горячих кнопок). А набор в командной строке "захламляет" историю команд. Сначала именно поэтому я и доделал диалоги. Потом нашёл возможность в диалоге сохранения закладки указать, какую конкретно панель запоминать (т.е. вообще можно запомнить контекст обеих панелей!) И для меня это оказалось полезным.
Таймаут вляет только на время показа подсказки после запоминания или перехода (в справке это написано однозначно, Вы её читали?), набирать комбинацию можно, пока рука не устанет прижимать RCtrl/RCtrlShift/RCtrlAlt.
Контекст обеих панелей сохраняется стандартно, если набирать новую комбинацию с RCtrlAlt. (и это тоже описано в справке. Интересно, для чего вообще я её писал?)
buniak_a_h wrote:
Thu 03 May, 2018 13:06
IgorZ wrote:
Thu 03 May, 2018 12:09
Если надо, могу дать программный интерфейс, чтоб из своего файла вызывать BookmarkManager.
1. Вы сможете реализовать поиск (а) с wildcard-ами как в промежуточных папках, так и в последней? А также указание имени диска в виде *: или в виде регэкспа типа [d-f]: ? И поиск по списку вариантов, разделённых ";" (как в path)?
2. Вы сможете предоставить в интерфейсе сохранения закладок (функция BMSaveFolder) также и признак, какие панели сохранять?
3. Вы можете сделать так, чтобы если закладка (с учетом дополнения trail) указывает на файл, а не на папку, то происходило позиционирование на объекте, а не вход в папку?

Если всё это будет реализовано - мне хватит и интерфейса к функциям CLProc (или GoToFolder, если указанные в пунктах 1 и 3 изменения будут реализованы в ней) и BMSaveFolder.
Короче, если Вы против моих изменений, я убираю свои посты и пользуюсь моими переделками "индивидуально". Только скажите.
Думаю, доступ к CLProc будет вполне достаточен для программного доступа к возможностям BookmarkManager-а.
Посты убирать незачем. Обычная беседа, по теме.
"Когда Аллах создавал время, он сделал его достаточно". А если бы не было желания, я бы вообще за написание BookmarkManager-а не брался. Так что сделаю, тем более, что идея действительно интересная.
Что же касается переделок, наиболее правильно поступать следующим образом (это общеупотребительное правило): если автор заявляет, что не хочет, или не может реализовать какие-то хотелки, то создаётся либо дополнение к исходному ПО (работающее вместе с ним), либо форк его (работающий вместо него), в зависимости от необходимости и желания. В случае форка правила хорошего тона требуют указать ссылку на предшественника и отличия от него. К примеру, если бы я отказался внедрять поддержку *-к в папках, тут не обойтись без форка, а для дополнительных макросов вызова (при наличии программного интерфейса, а он будет, сделать его - дело недолгое) достаточно небольшого дополнения.