ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Здесь обсуждается всё, что касается макросов.
Post Reply
buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

Макрос навеян этим:
PieApple wrote:
Thu 23 Jan, 2014 12:57
Еще хотел бы поделиться идеей, реализованной в Проводнике с Windows 7, Total Commander, что если нажать мышкой на имя папки в адресной строке сверху, то происходит переход вверх на эту папку.
На самом деле получилось прикольно и, возможно, полезно (если Вы любите настольных грызунов).
Суть:
Клик мышой на заголовке панели, содержащей имя папки, вызывает переход (как в проводнике). А если клик приходится на разделитель (бэкслэш), то предоставляется выбор, в какую папку перейти.
Первоначальный макрос сваян «на коленке» за полчасика, потому не судите строго. Если будут отзывы и замечания — попробую «докрутить».

Начиная с этой версии я перестал выкладывать текст скрипта в сообщении (уж больно трудоёмко стало, т.к. он вырос). Тем более что “Select all” на сайте опять перестал работать. Теперь только во вложении в виде 7z-архива.
Сведения о версии:
Версия 1.4.8.
  1. При входе в диалоговый режим предусмотрено гашение выделения текста (неудачная попытка была предпринята в версии 1.4.6).
  2. Стилистические правки в файлах помощи и языковом
  3. Перекомпонован диалог настройки таким образом, чтоб всё помещалось
  4. В настроечном диалоге реализована краткая контекстная подсказка (аналог Hint, но не всплывающая, а выводимая в «подвале» формы.
Версия 1.4.9.
  • Исправлена ошибка, приводившая к "блокировке" скрипта в случае клика по рамке панели вне заголовка (вне «чувствительной зоны»).
    (Блокировка - неработоспособность скрипта до перезагрузки макросов командой macro:load)
Версия 1.4.10.
  • Изменён алгоритм синтаксического разбора строки заголовка для корректной обработки времени, заданного в американском формате (2:10 AM) при клике по правой панели
ClickToTitleDir-1.4.10.7z
(23.92 KiB) Downloaded 19 times

Вместе с файлом самого скрипта поставляются языковые файлы ClickToTitleDirRus.lng и ClickToTitleDirEng.lng и файл помощи ClickToTitleDirRus.hlf.
Last edited by buniak_a_h on Mon 04 May, 2020 12:18, edited 65 times in total.

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

Latest post of the previous page:

buniak_a_h wrote:
Wed 09 Oct, 2019 02:04
Или я не понял документацию (что, в общем, естественно - там написана полная галиматья: нумерация элементов таблицы начинается с 1, а не с 0), то ли есть какие-то недокументированные возможности
Вы читаете документацию C API, но используете его посредством LuaFAR.
При этом база большинства индексов меняется с 0 на 1 (должно быть документировано).

Или приведите ссылку на 'некорректную' статью.

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote:
Wed 09 Oct, 2019 07:00
Или приведите ссылку на 'некорректную' статью.
Я не знаю, как получить ссылку на статью, но порядок такой:
1. руководство luafar_manual.chm
2. В содержании найти LuaFAR Far libraries -> DialogEvents -> DN_CTLCOLORDLGITEM
3. Оттуда - по ссылке DN_CTLCOLORDLGITEM (внизу)
Получаем страницу (как я только что выяснил - из FarEncyclopedia.ru, но пользователю-то этого не видно! Он начинал с руководства LuaFAR, да и в заголовке по-прежнему написано Manual of LuaFAR 3!) FarEncyclopedia.ru\html\dialogapi\dmsg\dn_ctlcolordlgitem.html, и на этой странице написано Colors[0]=Title, Colors[1]=HiText, Colors[2]=Box, Colors[3]=0 . Я, конечно, не по уши деревянный и понимаю, что это уже описание интерфейса процедуры на C, а значит - описание API. Но в какой момент руководство по LuaFAR заменилось на описание API - не уловить.
Last edited by buniak_a_h on Wed 09 Oct, 2019 10:25, edited 1 time in total.

Shmuel
Posts: 6150
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 319 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by Shmuel »

buniak_a_h wrote:
Wed 09 Oct, 2019 10:22
Я, конечно, [пропущено] понимаю, что это уже описание интерфейса процедуры на C, а значит - описание API. Но в какой момент руководство по LuaFAR заменилось на описание API - не уловить.
В тот момент, когда вы кликнули на ссылку, ибо над ссылкой есть подзаголовок "Far API used".
--
Clipboard01.png
Clipboard01.png (10.68 KiB) Viewed 789 times

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote:
Wed 09 Oct, 2019 06:51
https://api.farmanager.com/ru/dialogapi ... ition.html
Я немножко не об этом.
При клике на поле это сообщение возвращает предыдущую позицию (которая была ДО клика). При KEY_EVENT не происходит перерисовки редактора. А при Msg==DN_CLOSE - всегда последняя позиция. Варианты, которые пришли мне в голову -= это повесить определение позиции на DN_ENTERIDLE или на DN_DRAWDLGITEMDONE (при необходимости заставив перерисовать). При первом варианте задержка была заметна без секундомера. Поэтому я остановился на DN_DRAWDLGITEMDONE, при необходимости (при клавиатурных событиях) явно заставив движок перерисовать диалог. Некрасиво, но друго не придумал.

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

Shmuel wrote:
Wed 09 Oct, 2019 10:33
В тот момент, когда вы кликнули на ссылку
Тогда (на будущее) объясните мне, как найти описание (требования) к обработчику события DN_CTLCOLORDLGITEM в макросе? Я не нашёл другого способа выйти на возвращаемые параметры.

Shmuel
Posts: 6150
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 319 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by Shmuel »

buniak_a_h wrote:
Wed 09 Oct, 2019 11:33
Тогда (на будущее) объясните мне, как найти описание (требования) к обработчику события DN_CTLCOLORDLGITEM в макросе? Я не нашёл другого способа выйти на возвращаемые параметры.
А что конкретно не понятно? Вроде в статье всё расписано (приведено на скриншоте в моём предыдущем сообщении).

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

buniak_a_h wrote:
Wed 09 Oct, 2019 11:25
При клике на поле это сообщение возвращает предыдущую позицию (которая была ДО клика)
Чтобы получить позицию ПОСЛЕ - запускайте функцию через far.Timer (с задержкой 0).
Или же попробуйте использовать DN_GOTFOCUS, который сейчас приходит после каждого клика (хотя не факт что так будет всегда).

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

Shmuel wrote:
Wed 09 Oct, 2019 11:40
А что конкретно не понятно? Вроде в статье всё расписано (приведено на скриншоте в моём предыдущем сообщении).
В той статье, с которой сделан скриншот, не указаны в зависимости от типов диалоговых объектов, какие элементы массива tFarDialogItemCoors используются и что они означают. Единственное место, где я нашёл это описание - в описании API. Вот и получается, что нормальной помощи для макрописцев я не нашёл.

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote:
Wed 09 Oct, 2019 12:04
buniak_a_h wrote:
Wed 09 Oct, 2019 11:25
При клике на поле это сообщение возвращает предыдущую позицию (которая была ДО клика)
Чтобы получить позицию ПОСЛЕ - запускайте функцию через far.Timer (с задержкой 0).
Или же попробуйте использовать DN_GOTFOCUS, который сейчас приходит после каждого клика (хотя не факт что так будет всегда).
Спасибо, конечно, но я, по-моему, нашёл более удобный и компактный способ. Тем более, что я не понял, какую функцию надо запускать. Все эти действия происходят в обработчике событий диалога, а его, насколько я понимаю, запускает движок диалога.

Shmuel
Posts: 6150
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 319 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by Shmuel »

buniak_a_h wrote:
Wed 09 Oct, 2019 12:33
В той статье, с которой сделан скриншот, не указаны в зависимости от типов диалоговых объектов, какие элементы массива tFarDialogItemCoors используются и что они означают. Единственное место, где я нашёл это описание - в описании API. Вот и получается, что нормальной помощи для макрописцев я не нашёл.
Мануал LuaFAR (весь, не только эта статья) предполагает знание FAR API читателем или, как минимум, знание соответствующей его части. Иначе пришлось бы продублировать Энциклопедию FAR в мануале LuaFAR.

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

buniak_a_h wrote:
Wed 09 Oct, 2019 12:37
Спасибо, конечно, но я, по-моему, нашёл более удобный и компактный способ.
Способ который (по вашему выражению) "попахивает", ведь перерисовка тут не при чём вообще.

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote:
Wed 09 Oct, 2019 13:14
Способ который (по вашему выражению) "попахивает", ведь перерисовка тут не при чём вообще.
Я ж разве спорю? Вот если бы либо было событие DN_CURSORPOSCHANGED, либо при MOUSE_EVENT сразу можно было бы получить позицию курсора - это был бы самый прямой способ. Увы, "бы" мешает... Вот в списке по LISTCHANGED можно получить и предыдущую, и новую позиции. И вопросов не возникает :-(

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by John Doe »

buniak_a_h wrote:
Wed 09 Oct, 2019 13:42
Я ж разве спорю?
А разве нет?
Можно попробовать самое простое: убрать перерисовку и вместо DN_DRAWDLGITEMDONE использовать DN_GOTFOCUS.

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

John Doe wrote:
Wed 09 Oct, 2019 13:57
использовать DN_GOTFOCUS
Я пока не пробовал, но вообще-то фокус не теряется. У меня было подозрение, что GOTFOCUS придёт единственный раз - в начале. Но я проверю...
Проверил. При клике мышью возникает DN_GOTFOCUS, а при клавиатурных событиях - нет. Поэтому просто повесить на DN_GOTFOCUS не получится. Извините... Оставляю пока пару send:DM_REDRAW и DN_DRAWDLGITEMDONE.
Last edited by buniak_a_h on Wed 09 Oct, 2019 14:13, edited 1 time in total.

buniak_a_h
Posts: 1926
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by buniak_a_h »

Версия 1.2.2.
Вроде, доделана работа в плагиновых панелях (проверялось на примере MultiArc и ArcLite). Где-то так примерно...

User avatar
Taciturn
Posts: 419
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 33 times
Been thanked: 11 times
Contact:

ClickToTitleDir — переход к папкам по щелчку на заголовке панели (и др.)

Post by Taciturn »

Far Manager v3.0 build 5454 (последняя стабильная сборка), просто распакованный архив, никаких настроек + распакованный ClickToTitleDir.1.2.2.lua.7z в scripts. Правый клик по верхней строчке выдаёт:

В Far Manager v3.0 build 5485 всё работает нормально. Если это нормально и для работы макроса требуется версия Far'а новее стабильной, то не могли бы вы это прямо написать в первом сообщении?

Заходим Far30b5485.x86.20191010.7z\Addons, клик по «Far30b5485.x86.20191010.7z» вызывает обычное меню. Нельзя ли вместо меню сделать переход в корень архива?
Last edited by Taciturn on Thu 10 Oct, 2019 08:36, edited 1 time in total.

Post Reply

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