Page 10 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 04 May, 2018 05:48
by IgorZ

Latest post of the previous page:

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-а не брался. Так что сделаю, тем более, что идея действительно интересная.
Что же касается переделок, наиболее правильно поступать следующим образом (это общеупотребительное правило): если автор заявляет, что не хочет, или не может реализовать какие-то хотелки, то создаётся либо дополнение к исходному ПО (работающее вместе с ним), либо форк его (работающий вместо него), в зависимости от необходимости и желания. В случае форка правила хорошего тона требуют указать ссылку на предшественника и отличия от него. К примеру, если бы я отказался внедрять поддержку *-к в папках, тут не обойтись без форка, а для дополнительных макросов вызова (при наличии программного интерфейса, а он будет, сделать его - дело недолгое) достаточно небольшого дополнения.

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

Posted: Fri 04 May, 2018 07:40
by buniak_a_h
IgorZ wrote:
Fri 04 May, 2018 05:48
А если бы не было желания, я бы вообще за написание BookmarkManager-а не брался. Так что сделаю, тем более, что идея действительно интересная.
Я немного не доделал следующий функционал (связан с настройкой, потому делать не стал):
правильно было бы так: если в имени промежуточной папки вообще нет wildcard-ов, а также нет точки, то считать (возможно, при включённой соответствующей настройке) поиск "по вхождению". Т.е. если нет объекта, в точности совпадающего с введённым именем <name>, то искать *<name>*. Это было очень удобно в почившем NameFolders...
Ну и совет по интерфейсу "без-интерфейсного" варианта: со временем, возможно, я и неправ, но "вслепую" всё равно неудобно. Надо отображать нажатые символы (например, на рамке панели). Это - именно пожелание: я всё равно предпочитаю вызвать диалог одним-двумя нажатиями, а потом комфортно вводить имя с подпапкой.
IgorZ wrote:
Fri 04 May, 2018 05:48
Контекст обеих панелей сохраняется стандартно, если набирать новую комбинацию с RCtrlAlt.
Функционал моего диалога шире (и универсальней): (а) с RCtrlAlt сохраняются пассивная и активная панели. Т.е., насколько я понял, если при сохранении активной была правая панель, а при восстановлении закладки - левая, то панели поменяются местами. Мой диалог позволяет сохранить либо активную/пассивную, либо левую/правую. (б) можно ли сохранить только пассивную панель (например, в разных сеансах работы ФАРа "бегаем" по разным панелям и "собираем" нужные файлы в один. При этом перед процессом надо восстановить пассивную панель)?
И в связи с этим есть пожелание (правда, я не разобрался, что такое "локальные" и "глобальные" закладки и зачем они нужны. Возможно, моё пожелание "перекроет" эти понятия"): сделать "временные" закладки - на один сеанс работы. Например, помечать их таким образом, чтобы при первом чтении они пропускались. Бывает удобно...
IgorZ wrote:
Fri 04 May, 2018 05:48
описано в справке. Интересно, для чего вообще я её писал?
Ну...

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

Posted: Fri 04 May, 2018 10:24
by IgorZ
buniak_a_h wrote:
Fri 04 May, 2018 07:40
Я немного не доделал следующий функционал (связан с настройкой, потому делать не стал):
правильно было бы так: если в имени промежуточной папки вообще нет wildcard-ов, а также нет точки, то считать (возможно, при включённой соответствующей настройке) поиск "по вхождению". Т.е. если нет объекта, в точности совпадающего с введённым именем <name>, то искать *<name>*. Это было очень удобно в почившем NameFolders...
Запишу себе. Только хочу заметить: чем больше хотелок, тем дольше их реализовывать.
buniak_a_h wrote:
Fri 04 May, 2018 07:40
Ну и совет по интерфейсу "без-интерфейсного" варианта: со временем, возможно, я и неправ, но "вслепую" всё равно неудобно. Надо отображать нажатые символы (например, на рамке панели). Это - именно пожелание: я всё равно предпочитаю вызвать диалог одним-двумя нажатиями, а потом комфортно вводить имя с подпапкой.
Это, как раз, просто. И, пожалуй, действительно удобно.
buniak_a_h wrote:
Fri 04 May, 2018 07:40
Функционал моего диалога шире (и универсальней): (а) с RCtrlAlt сохраняются пассивная и активная панели. Т.е., насколько я понял, если при сохранении активной была правая панель, а при восстановлении закладки - левая, то панели поменяются местами. Мой диалог позволяет сохранить либо активную/пассивную, либо левую/правую. (б) можно ли сохранить только пассивную панель (например, в разных сеансах работы ФАРа "бегаем" по разным панелям и "собираем" нужные файлы в один. При этом перед процессом надо восстановить пассивную панель)?
В диалоге создания/редактирования закладок действуют стандартные клавиатурные комбинации Far, так что все подобные сколь угодно сложные закладки делаются там элементарно. Так что RCtrl/,Ins - и вперёд. Разве что нет возможности автоматом вставлять <?>, но их быстрее набрать с клавиатуры.
buniak_a_h wrote:
Fri 04 May, 2018 07:40
И в связи с этим есть пожелание (правда, я не разобрался, что такое "локальные" и "глобальные" закладки и зачем они нужны. Возможно, моё пожелание "перекроет" эти понятия"): сделать "временные" закладки - на один сеанс работы. Например, помечать их таким образом, чтобы при первом чтении они пропускались. Бывает удобно...
Локальные сохраняются в локальном профиле Far, глобальные - в глобальном. То есть, первые - для конкретной машины, вторые - переносимые. Актуально только если локальный и глобальный профили хранятся раздельно.
С временными - не так просто. Сама система работы с закладками не предусматривает возможности отслеживать подобное. Никакого "первого чтения" нет. И, главное, в этом случае новый экземпляр Far, запущенный параллельно с первым, будет сносить ему все временные закладки.
В общем, проще написать новый скрипт, чем вносить в этот подобную функциональность.
buniak_a_h wrote:
Fri 04 May, 2018 07:40
IgorZ wrote:
Fri 04 May, 2018 05:48
описано в справке. Интересно, для чего вообще я её писал?
1. Без того, чтоб её прочитать, невозможно даже начать использовать (уж больно нестандартный подход - набор текста при нажатом RCtrl)
Нормальный подход. Комбинация унаследована от предшественника, а он взял её от стандартных Far-овских ссылок на папки. Так что это самый стандартный подход, который только может быть.
Кстати, "Ссылки на папки" Far, автоматически не сохраняются, если не ошибаюсь. Так что для временных нужд можете попробовать использовать их.
buniak_a_h wrote:
Fri 04 May, 2018 07:40
2. Вопрос поставлен неправильно. Не "для чего", а "для кого". Мой начальник ВЦ ещё в советские времена говорил, что "руководство надо писать для дебилов". ;-) Он имел в виду - чтоб дебилам понятно было, но воспринималось это - умный чел мануалов не читает... :-)
Вы до сих пор беспрекословно исполняете всё, что говорил Вам Ваш начальник ВЦ? ;)

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

Posted: Fri 04 May, 2018 20:08
by buniak_a_h
Из моих хотелок:
buniak_a_h wrote:
Thu 26 Apr, 2018 21:27
Задачка сложнее, но была очень удобной в старом Named Folders: кроме Environment-переменных в список добавить папки, на которые ссылаются элементы главного меню. В NamedFolders была даже возможность не просто переходить в папку, а ещё и запускать приложение. Это было бы вообще идеально, но я понимаю, что это уж совсем много хочу...
Как выяснилось, с моим добавленным функционалом эта задача решается просто:
(а) вводите закладку (напр. StartMenu) со значением: ||%appdata%;%ALLUSERSPROFILE%\Microsoft\windows\start menu\programs|
(б) для перехода/выполнения программы дайте команду вида bm:startmenu\7-z\*.lnk
(в) в получившемся списке встаёте на пункт, соответствующий 7-Zip File Manager.lnk
(г) жмёте [CtrlPgDn]
В результате запускается 7-Zip File Manager.
Здесь слегка изменённый скрипт: реализована хотелка:
buniak_a_h wrote:
Fri 04 May, 2018 07:40
если в имени промежуточной папки вообще нет wildcard-ов, а также нет точки, то считать поиск "по вхождению"
Даже слегка перевыполнил: слово "промежуточный" тут лишнее. Т.е. срабатывает переход вида dow\арх\far при наличии закладки downloads и папки в ней Архивы\4_Far.
BookmarkManager.lua.bb.7z
(16.14 KiB) Downloaded 54 times

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

Posted: Sat 05 May, 2018 08:01
by John Doe
buniak_a_h, может отдельную тему?
В любом случае, вложение лучше держать в одном (первом) посте.

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

Posted: Sat 05 May, 2018 11:09
by buniak_a_h
John Doe wrote:
Sat 05 May, 2018 08:01
buniak_a_h, может отдельную тему?
В любом случае, вложение лучше держать в одном (первом) посте.
Я уж тоже было подумал, но IgorZ обещал реализовать практически весь функционал (кроме диалогов) в своём основном скрипте. И тогда всё это станет ненужным. К тому же я пишу сюда "на всякий случай", но так и не знаю, может ли это кому-то пригодиться.

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

Posted: Wed 16 May, 2018 10:48
by IgorZ
По специальному заказу buniak_a_h ;):

Версия 3.0.0 -
  • Если в качестве цели указан файл, не просто переходим в папку, но и позиционируемся на файле.
  • Возможно не только переходить в папку или на файл, но и выполнять системные контекстные команды "открыть" и "редактировать"; можно указывать действие в параметрах закладки.
  • Можно указывать маски для пути (включая маску имени локального диска); основа алгоритма разработана buniak_a_h. Если элемент пути не найден, ищем его же, но в обрамлении "*" (настраивается).
  • Скрипт теперь можно вызывать как функцию, параметры как для префиксов. Подробности в справке.
  • При наборе последовательности символов она опционально отображается на экране. Цвет и положение настраивается. Кому мешает - выберите цвет "чёрное на чёрном".
  • При неполном наборе закладки/переменной, если подходит всего один вариант, меню может не выводиться (настраивается).
  • Отдельная настройка для показа переменных окружения в меню. Теперь можно пользоваться ими, но не видеть их в меню.
  • Рефакторинг.

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

Posted: Wed 16 May, 2018 13:59
by skipik
IgorZ, у меня для подсказки установлено "-1", но в новой версии оно всё равно кратковременно мерцает. Так и должно быть?

// upd

Отбой, выбрал, как у вас написано, черное на черном и всё стало как раньше.

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

Posted: Fri 06 Jul, 2018 21:58
by Piton812
IgorZ wrote:
Fri 24 Jan, 2014 09:51
Данный скрипт позволяет назначать на папки и файлы закладки
Уточните пожалуйста как ставить в закладки пути к файлам? Есть ли для этого хоткей (т.е. встал на файл, нажал хоткей и этот файл добавился в закладки). А также правильно понимаю, что на один хоткей можно повесить только один путь (файл или папку), и нельзя на один хот кей повесить несколько объектов?

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

Posted: Mon 09 Jul, 2018 04:32
by IgorZ
Piton812 wrote:
Fri 06 Jul, 2018 21:58
IgorZ wrote:
Fri 24 Jan, 2014 09:51
Данный скрипт позволяет назначать на папки и файлы закладки
Уточните пожалуйста как ставить в закладки пути к файлам? Есть ли для этого хоткей (т.е. встал на файл, нажал хоткей и этот файл добавился в закладки). А также правильно понимаю, что на один хоткей можно повесить только один путь (файл или папку), и нельзя на один хот кей повесить несколько объектов?
Хоткей есть только для добавления папок (и перехода по любым закладкам). Файлы можно добавлять вручную в новые или существующие закладки через меню (вызывается по Ctrl/). Подробности - в справке (с поправкой: если где-то написано просто "папка", это, скорее всего, недоправлена справка, и надо читать "папка или файл"; где написано просто "файл", это про плагин и файл-контейнер, наподобие архивного).

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

Posted: Wed 11 Jul, 2018 17:44
by Arama
Нажимаю Ins и получаю сообщение :(

Code: Select all


   ╔═════════════════════════════════════════════════════ LuaMacro ══════════════════════════════════════════════════════╗
   ║ C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:191: bad argument #1 to 'ipairs' (table expected, got nil) ║
   ║ stack traceback:                                                                                                    ║
   ║    [C]: in function 'ipairs'                                                                                        ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:191: in function 'BM2str'                               ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:356: in function 'BMEdit'                               ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:528: in function <C:\Program Files\Far Manager\Scripts\ ║
   ║ BookmarkManager.lua:448>                                                                                            ║
   ╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
   ║                                                       { OK }                                                        ║
   ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝


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

Posted: Thu 12 Jul, 2018 18:11
by Arama
А как почистить все следы от скрипта? Хочу начать жить заново с ним

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

Posted: Fri 13 Jul, 2018 05:05
by IgorZ
Arama wrote:
Wed 11 Jul, 2018 17:44
Нажимаю Ins и получаю сообщение :(

Code: Select all


   ╔═════════════════════════════════════════════════════ LuaMacro ══════════════════════════════════════════════════════╗
   ║ C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:191: bad argument #1 to 'ipairs' (table expected, got nil) ║
   ║ stack traceback:                                                                                                    ║
   ║    [C]: in function 'ipairs'                                                                                        ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:191: in function 'BM2str'                               ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:356: in function 'BMEdit'                               ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:528: in function <C:\Program Files\Far Manager\Scripts\ ║
   ║ BookmarkManager.lua:448>                                                                                            ║
   ╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
   ║                                                       { OK }                                                        ║
   ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

А у Вас какая версия скрипта? Актуальная 3.0.0 в строке 191 содержит

Code: Select all

for AP,Pnl in pairs({[1]=A,[0]=P}) do -- переберём панели (если есть)
. То есть ipairs там нет вообще.
Arama wrote:
Thu 12 Jul, 2018 18:11
А как почистить все следы от скрипта? Хочу начать жить заново с ним
Удобнее всего с помощью DBEdit. В LOCAL и GLOBAL входим в IgorZ и удаляем разделы, начинающиеся с BookmarkManager. Затем скачиваем актуальную версию (ошибка, подобная процитированной выше была только в одной версии и исправлена более полугода назад. К сожалению, та версия портила закладки при записи, поэтому, если нет желания разбираться по каждой, лучше действительно снести всё. Если желание есть, на предыдущих страницах темы это разбиралось, где-то в январе этого года.) и работаем.

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

Posted: Wed 25 Jul, 2018 11:59
by Arama
IgorZ
Почистил, поставил версию 3.0.0 от 16.05.18 размер 57590
Букмарки стали добавляться, но при попытки перейти получаю вот такое сообщение:

Code: Select all

   ╔═════════════════════════════════════════════════════ LuaMacro ══════════════════════════════════════════════════════╗
   ║ C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:201: attempt to index local 'Rest' (a nil value)           ║
   ║ stack traceback:                                                                                                    ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua: in function 'GoToFolder'                               ║
   ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:593: in function <C:\Program Files\Far Manager\Scripts\ ║
   ║ BookmarkManager.lua:511>                                                                                            ║
   ╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
   ║                                                       { OK }                                                        ║
   ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
пытаюсь перейти в папку вида \\server\folder

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

Posted: Fri 27 Jul, 2018 05:40
by IgorZ
Версия 3.0.1 -


  • Arama wrote:
    Wed 25 Jul, 2018 11:59
    IgorZ
    Почистил, поставил версию 3.0.0 от 16.05.18 размер 57590
    Букмарки стали добавляться, но при попытки перейти получаю вот такое сообщение:

    Code: Select all

       ╔═════════════════════════════════════════════════════ LuaMacro ══════════════════════════════════════════════════════╗
       ║ C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:201: attempt to index local 'Rest' (a nil value)           ║
       ║ stack traceback:                                                                                                    ║
       ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua: in function 'GoToFolder'                               ║
       ║    C:\Program Files\Far Manager\Scripts\BookmarkManager.lua:593: in function <C:\Program Files\Far Manager\Scripts\ ║
       ║ BookmarkManager.lua:511>                                                                                            ║
       ╟─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
       ║                                                       { OK }                                                        ║
       ╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
    
    пытаюсь перейти в папку вида \\server\folder
    Исправление ошибки с переходом в сетевую папку.
  • Исправление справки.
  • Рефакторинг.

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

Posted: Fri 27 Jul, 2018 09:34
by Arama
IgorZ
IgorZ wrote:
Fri 27 Jul, 2018 05:40
Исправление ошибки с переходом в сетевую папку.
заработало! спасибо

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

Posted: Thu 27 Sep, 2018 22:22
by mc_user
Здравствуйте. Я Far только начал изучать и как устанавливать различные плагины типа сабжа пока не знаю. Пока попробовал просто поместить lua-скрипт (версия 3.0.1) в директорию ./Scripts/ относительно установки Far и перезапустил Far. Описанный в стартовом посте интерфейс не работает. Уверен, что сделал что-то не так и чего-то не понимаю. Объясните пожайлуста.