Page 6 of 34

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

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

Начиная с этой версии я перестал выкладывать текст скрипта в сообщении (уж больно трудоёмко стало, т.к. он вырос). Тем более что “Select all” на сайте опять перестал работать. Теперь только во вложении в виде 7z-архива.
Сведения о версии:
Версия 1.4.12.
  1. Исправлена ошибка процедуры настройки, возникшая из-за изменения интерфейса. Ошибка проявлялась при вызове настройки сликом средней клавиши (колёсиком) на заголовке панели.
  2. Сделана возможность вызова диалога настройки скрипта через меню настроек плагинов.
ClickToTitleDir-1.4.12.7z
(24.95 KiB) Downloaded 28 times

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

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

Posted: Wed 09 Oct, 2019 02:46
by HaRT

Latest post of the previous page:

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

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

Posted: Wed 09 Oct, 2019 02:58
by HaRT
buniak_a_h wrote: Wed 09 Oct, 2019 02:34 Может, там все проблему уже будут решены.
Может, заодно исправите в диалоговом режиме переход не в ту директорию, если щёлкать левой кнопкой по последнему символу какой-нибудь папки в пути? У меня оно и в версии 1.1.1 так работает. Ну и CtrlDown ничего не делает, хотя, судя по коду, должен бы.

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

Posted: Wed 09 Oct, 2019 03:12
by buniak_a_h
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 ничего не делает, хотя, судя по коду, должен бы.
Делал... Что-то сломалось.

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

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

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

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

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

Posted: Wed 09 Oct, 2019 04:31
by HaRT
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" по умолчанию включен пробел
Удивительно, но это так. Так ведь он там последним символом — можно просто отсекать.

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

Posted: Wed 09 Oct, 2019 05:30
by buniak_a_h
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("[ -я]", '')..'-+=|'
Глюк с кликом на последнем символе имени каталога у меня не повторяется. Возможно, у меня он уже был исправлен...

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

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

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

Posted: Wed 09 Oct, 2019 06:33
by buniak_a_h
Версия 1.2.1 - начало работы в плагиновых панелях (кроме смены диска и перехода по списку вложенных папок - пока).

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

Posted: Wed 09 Oct, 2019 06:51
by John Doe
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 читать с экрана консоли
У консоли есть апи.

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

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

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

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

Posted: Wed 09 Oct, 2019 10:22
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 - не уловить.

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

Posted: Wed 09 Oct, 2019 10:33
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 1272 times

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

Posted: Wed 09 Oct, 2019 11:25
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, при необходимости (при клавиатурных событиях) явно заставив движок перерисовать диалог. Некрасиво, но друго не придумал.

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

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

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

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