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

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

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

Post by buniak_a_h » Sun 29 Sep, 2019 07:51

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

Начиная с этой версии я перестал выкладывать текст скрипта в сообщении (уж больно трудоёмко стало, т.к. он вырос). Тем более что “Select all” на сайте опять перестал работать. Теперь только во вложении в виде 7z-архива.


Вместе с файлом самого скрипта поставляются языковые файлы ClickToTitleDirRus.lng и ClickToTitleDirEng.lng и файл помощи ClickToTitleDirRus.hlf.

ClickToTitleDir-1.4.7.7z
(22.83 KiB) Downloaded 23 times
Last edited by HaRT on Wed 06 Nov, 2019 20:42, edited 62 times in total.

User avatar
HaRT
Moderator
Posts: 9088
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 157 times

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

Post by HaRT » Wed 09 Oct, 2019 02:46

Latest post of the previous page:

buniak_a_h wrote:
Wed 09 Oct, 2019 02:34
Это правильно. А перед тем возьмёте то, что я выложу.
Я же со своей стороны прошу не общаться со мной таким тоном, как профессор с первокурсником. Это не способствует плодотворному сотрудничеству. Надеюсь на понимание.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
HaRT
Moderator
Posts: 9088
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 157 times

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

Post by HaRT » Wed 09 Oct, 2019 02:58

buniak_a_h wrote:
Wed 09 Oct, 2019 02:34
Может, там все проблему уже будут решены.
Может, заодно исправите в диалоговом режиме переход не в ту директорию, если щёлкать левой кнопкой по последнему символу какой-нибудь папки в пути? У меня оно и в версии 1.1.1 так работает. Ну и CtrlDown ничего не делает, хотя, судя по коду, должен бы.
Last edited by HaRT on Wed 09 Oct, 2019 02:59, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 03:12

HaRT wrote:
Wed 09 Oct, 2019 02:46
рошу не общаться со мной таким тоном, как профессор с первокурсником
Это ответочка на
HaRT wrote:
Tue 08 Oct, 2019 19:46
А непротестированные изменения я, в отличие от некоторых, не выкладываю.
;-)
HaRT wrote:
Wed 09 Oct, 2019 02:58
CtrlDown ничего не делает, хотя, судя по коду, должен бы.
Делал... Что-то сломалось.

User avatar
HaRT
Moderator
Posts: 9088
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 157 times

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

Post by HaRT » Wed 09 Oct, 2019 03:20

buniak_a_h wrote:
Wed 09 Oct, 2019 03:12
ответочка
Ладно, квиты.
Но хочу заострить внимание, что проблему с шириной диалога на длинном пути я воспроизвести так и не смог, т.ч., увы, и исправить тоже не смогу.
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 04:07

По поводу диалогового режима: там есть такая переменная w - это некий показатель ширины диалога (плюс-минус константа)
Оказалось, что в Config"System.BoxSymbols" по умолчанию включен пробел. поэтому и слетало. Заменю Far.GetConfig"System.BoxSymbols" на константу...
P/S. Беда с рамкой. Ну ладно, когда всё рисуется псевдографикой. А если работать на TelNet-е, например, и графические символы эмулируются плюсами и минусами? Впрочем, их тоже можно в константу занести. Ограничение будет - имена каталогов не должны содержать символы +-=┌─┐╔═╗╒═╕╓─╖, а рамки панелей - наоборот, должны будут составляться из этих символов. Не думаю, что это будет существенное ограничение.
Last edited by buniak_a_h on Wed 09 Oct, 2019 04:18, edited 2 times in total.

User avatar
HaRT
Moderator
Posts: 9088
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 157 times

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

Post by HaRT » Wed 09 Oct, 2019 04:31

buniak_a_h wrote:
Wed 09 Oct, 2019 04:07
в Config"System.BoxSymbols" по умолчанию включен пробел. поэтому и слетало
Хорошо, что разобрались. Но версию с исправлением двух своих ошибок (потерянные условие и строка с вызовом DM_REDRAW) я завтра всё равно не выкачу. Может, сами?
И не ускользнуло ли от вашего внимания объяснение о назначении того DI_DOUBLEBOX?
buniak_a_h wrote:
Wed 09 Oct, 2019 04:07
Беда с рамкой
А действительно ли нам так надо закладываться на символы рисования рамок? Неужто нельзя узнать требуемую часть строки, исходя из ширины панели и длины пути (пусть даже и повторив часть логики Фара по расположению текста на заголовке панели)?

P.S.
buniak_a_h wrote:
Wed 09 Oct, 2019 04:07
в Config"System.BoxSymbols" по умолчанию включен пробел
Удивительно, но это так. Так ведь он там последним символом — можно просто отсекать.
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 05:30

HaRT wrote:
Wed 09 Oct, 2019 04:31
buniak_a_h wrote:
Wed 09 Oct, 2019 04:07
в Config"System.BoxSymbols" по умолчанию включен пробел. поэтому и слетало
Хорошо, что разобрались. Но версию с исправлением двух своих ошибок (потерянные условие и строка с вызовом DM_REDRAW) я завтра всё равно не выкачу. Может, сами?
Реакция на CtrlDown как раз пропала из=за пропавшей DM_REDRAW . Возможно, приём идиотский, но просто я не нашёл другого способа, как получить позицию курсора в DI_EDIT-е кроме как заставить движок перерисовать его (ну, можно и весь диалог - он маленький).
HaRT wrote:
Wed 09 Oct, 2019 04:31
И не ускользнуло ли от вашего внимания объяснение о назначении того DI_DOUBLEBOX?
Нет. Я вернул DI_DOUBLEBOX. Хотя прием тоже проктологом попахивает. Логичнее было бы в самой far.Dialog параметр иметь.
HaRT wrote:
Wed 09 Oct, 2019 04:31
buniak_a_h wrote:
Wed 09 Oct, 2019 04:07
Беда с рамкой
А действительно ли нам так надо закладываться на символы рисования рамок? Неужто нельзя узнать требуемую часть строки, исходя из ширины панели и длины пути (пусть даже и повторив часть логики Фара по расположению текста на заголовке панели)?
Наверно, можно. НО! (а) Надо знать логику ФАРа, а методом тыка искать - нет, проще на рамку (б) Путь может быть обрезанным слева...
Вот если б сделали такую добавочку к SaveScreen - это было бы кузяво!
HaRT wrote:
Wed 09 Oct, 2019 04:31
P.S.
buniak_a_h wrote:
Wed 09 Oct, 2019 04:07
в Config"System.BoxSymbols" по умолчанию включен пробел
Удивительно, но это так. Так ведь он там последним символом — можно просто отсекать.
Не-не-не! Мы не знаем, что юзеру в голову придёт! Заменит он пробел на Chr(160), а вертикальные - на вертикальную черту (что на одной клавише со слэшом) - и всё...
Короче, эту проблему я решил так:
local BoxSymbols=Far.GetConfig"System.BoxSymbols":gsub("[ -я]", '')..'-+=|'
Глюк с кликом на последнем символе имени каталога у меня не повторяется. Возможно, у меня он уже был исправлен...

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 05:37

HaRT, Вы много где заменили hDlg:send("DM_... " ) на hDlg:send(F.DM_...). Это - из соображений эффективности?

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 06:33

Версия 1.2.1 - начало работы в плагиновых панелях (кроме смены диска и перехода по списку вложенных папок - пока).

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

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

Post by John Doe » Wed 09 Oct, 2019 06:51

buniak_a_h wrote:
Wed 09 Oct, 2019 05:30
но просто я не нашёл другого способа, как получить позицию курсора в DI_EDIT-е кроме как заставить движок перерисовать его
https://api.farmanager.com/ru/dialogapi ... ition.html
buniak_a_h wrote:
Wed 09 Oct, 2019 05:30
читать с экрана консоли
У консоли есть апи.

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

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

Post by John Doe » Wed 09 Oct, 2019 07:00

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

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

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 10:22

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: 5896
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 217 times

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

Post by Shmuel » Wed 09 Oct, 2019 10:33

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 391 times

buniak_a_h
Posts: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 11:25

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: 1100
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 36 times
Contact:

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

Post by buniak_a_h » Wed 09 Oct, 2019 11:33

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

Shmuel
Posts: 5896
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 217 times

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

Post by Shmuel » Wed 09 Oct, 2019 11:40

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

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

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

Post by John Doe » Wed 09 Oct, 2019 12:04

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

Post Reply

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