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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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.12.
  1. Исправлена ошибка процедуры настройки, возникшая из-за изменения интерфейса. Ошибка проявлялась при вызове настройки сликом средней клавиши (колёсиком) на заголовке панели.
  2. Сделана возможность вызова диалога настройки скрипта через меню настроек плагинов.
ClickToTitleDir-1.4.12.7z
(24.95 KiB) Downloaded 32 times

Вместе с файлом самого скрипта поставляются языковые файлы ClickToTitleDirRus.lng и ClickToTitleDirEng.lng и файл помощи ClickToTitleDirRus.hlf.
Last edited by buniak_a_h on Mon 25 Dec, 2023 02:15, edited 69 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Latest post of the previous page:

HaRT wrote: Wed 20 Jan, 2021 22:32 Да и сомнение берёт, что обвязка минимальная.
обвязка минимальная, а критерий успеха - просто не упасть по ошибке памяти после третьего (на всякий случай пятого) вызова
Вызов делается простым CtrlShiftR.
Но тут трагизм в другом немного, почему у всех работает "wchar_t[?]", а у меня вдруг перестал?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

citRiks wrote: Wed 20 Jan, 2021 23:03 критерий успеха - просто не упасть по ошибке памяти после третьего (на всякий случай пятого) вызова
Этот критерий у меня (в исправленном коде) достигается — запускал много раз, ни разу не упало. Рецепт: ffi.new("wchar_t[?]", read_len+1) — вот у buniak_a_h это самое +1 заложено в local nLength = Far.Width+1.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

HaRT,
Рецепт: ffi.new("wchar_t[?]", read_len+1)
мне нелзья с wchar_t, так падает сразу, о чем я писал уже несколько раз,
и в коде про это написано в строчном коментарии рядом со строчкой где падает.
поэтому ищем обходные пути, а какие еще варианты?
пользуем char[?], он работает, даже типа правильно, строчку выдает и читаем ее.
НО. через три вызова или менсьше, падает с такой ошибкой:

Code: Select all

╔═════════════════════════════════════════ Exception occurred ═════════════════════════════════════════╗
║ Exception: 0xC0000005 - EXCEPTION_ACCESS_VIOLATION                                                   ║
║ Details:   Memory at 65206E76 could not be written                                                   ║
║ errno:     0x00000000 - No error                                                                     ║
║ LastError: 0x00000000 - The operation completed successfully.                                        ║
║ NTSTATUS:  0x80000005 - {Buffer Overflow}  The data was too large to fit into the specified buffer.  ║
║ Address:   0x00005023 - lua51.dll!<unknown> (get the pdb)                                            ║
║ Function:  ProcessDialogEventW                                                                       ║
║ Source:                                                                                              ║
║ File:      C:\Program Files (x86)\Far Manager\Plugins\LuaMacro\LuaMacro.dll                          ║
║ Plugin:    LuaMacro 3.0.760.0 (Far macros in Lua, Shmuel Zeigerman & Far Group)                      ║
║ Far:       3.0.5730.0 x86 (e878bac)                                                                  ║
║ OS:        6.1.7601.2.1.0.256.1                                                                      ║
║ Kernel:    6.1.7601.18933 (win7sp1_gdr.150715-0600)                                                  ║
╟──────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                   [ Copy ] [ Stack ] [ Minidump ]                                    ║
╟──────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                            { Terminate Far } [ Unload plugin ] [ Ignore ]                            ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════╝
что же касается +1, то пробовал это и раньше,
вот и сейчас сделал такое изменение насколько я понял:

Code: Select all

	..
		-- [[ my attempt to be smart, fails not immediatly,
		-- but after second or third attempt to run it again: ]]
		ffi.new("char[?]", read_len + 1)
	local	read_res = C.ReadConsoleOutputCharacterW(
			hConsoleOutput,
	..
так?
ровно то же самое error ..
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

citRiks wrote: Wed 20 Jan, 2021 23:32 нелзья с wchar_t, так падает сразу, о чем я писал уже несколько раз
Что-то вы себе в окружении Луа капитально испортили, если у вас вылезает. Попробуйте LPTSTR заменить на LPWSTR (и оставить wchar_t, как в моём рецепте). Если не поможет, то придётся вам искать, какой модуль/скрипт/барабашка вам гадит.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

HaRT,
спасибо за попытку, а я сейчас тестирую без макросов, вроде есть успехи
наверное надо было мне с этого и начинать, а не бодрствовать ночью и опаздывать потом
просто использование char[?] казалось что давало тот сооблазнительный ответ,
который не вынудит к прочесыванию другого кода с целью отлавливания "барабашек".
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

citRiks wrote: Wed 20 Jan, 2021 22:58 A как у вас Luacheck не ругается на всякие "accessing undefined variable 'far'"?
Настроить же надо. F1
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

citRiks wrote: Thu 21 Jan, 2021 01:07 а я сейчас тестирую без макросов, вроде есть успехи
С этого надо было начинать.
Очень может быть что (в разных скриптах) у вас присутствуют два отличающихся определения ffi.
Это проглатывается молча, но срабатывает только первое.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Thu 21 Jan, 2021 08:40
citRiks wrote: Thu 21 Jan, 2021 01:07 а я сейчас тестирую без макросов, вроде есть успехи
С этого надо было начинать.
Уффф… Напугали. Я уже тоже начал такое подозревать, когда нашёл у себя модуль winapi.lua. Правда, он у меня, вроде, нигде не используется. Там просто имеется переопределение типа:

Code: Select all

typedef wchar_t WCHAR, *PWCHAR, *LPWSTR, *PWSTR;
Last edited by buniak_a_h on Thu 21 Jan, 2021 13:30, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Версия 1.4.12.
  1. Исправлена ошибка процедуры настройки, возникшая из-за изменения интерфейса. Ошибка проявлялась при вызове настройки сликом средней клавиши (колёсиком) на заголовке панели.
  2. Сделана возможность вызова диалога настройки скрипта через меню настроек плагинов. (F9 -> Options -> Plugins)
Last edited by buniak_a_h on Mon 25 Dec, 2023 02:22, edited 1 time in total.
dest
Posts: 106
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 18 times

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

Post by dest »

Предложения:
  1. Убрать жёлтые стрелки в пути в заголовке панели, если длина пути целиком помещается (сбивают с толку)
  2. Добавить реакцию на правый Ctrl (сейчас только левый) - Alt-TT, LCtrl-Down → Alt-TT, L/RCtrl-Down
  3. Исправить позиционирование выпадающего по Alt-TT, (LR)Ctrl-Down меню, чтобы оно не привязывалось к позиции мыши, а к панели и заголовку, на котором его вызывают (представим ситуацию с фаром шириной в три-пять мониторов, вызываем меню на крайней левой панели, курсор мыши в крайнем правом положении всех мониторов - меню появится в крайней правой части фара, а мы смотрим на крайнюю левую и ожидаем меню там)
Last edited by dest on Mon 25 Dec, 2023 11:37, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

dest wrote: Mon 25 Dec, 2023 11:37 Убрать жёлтые стрелки в пути в заголовке панели, если длина пути целиком помещается (сбивают с толку)
Я против. Эти жёлтые стрелки являются кнопками и выполняют вполне содержательную функцию даже тогда, когда путь умещается целиком. Другой разговор, что в этом случае можно было бы выводить эти кнопки каким-то менее броским цветом…
Фар есть инструмент, а не нянька. © 2009 DrKnS
dest
Posts: 106
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 18 times

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

Post by dest »

HaRT wrote: Mon 25 Dec, 2023 14:58Эти жёлтые стрелки являются кнопками и выполняют вполне содержательную функцию даже тогда, когда путь умещается целиком
Я как поставил скрипт, так тыкал-кликал, но так и не понял на интуитивном уровне без необходимости чтения документации и без объяснений buniak_a_h что это такое и зачем они нужны.
Это когда уже в курсе что и для чего они - тогда понятно. То если на клавиатуре нажал Alt-TT и появились эти стрелки, а руки всё так же на клавиатуре (а именно так они у меня и появлялись, мышей я в фаре не пользуюсь в 99,(9)% случаев) - то просто (контрол)влево-вправо ходят по пути, и стрелки эти именно таким образом озадачили - пришлось брать мышку и клацать по ним, пытаться понять, что же они делают и зачем нужны :| Стало ясно только после объяснения buniak... :/
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

У меня с эстетикой с детства беда (физиолог в экспедиции даже сказал, что тесты не выявили признаков жизнедеятельности того полушария, что за образное мышление отвечает), поэтому прошу совета.
В зависимости от (влезает или нет) использую цвета COL_MENUARROWS (не влезает) или COL_MENUARROWSDISABLED (влезает; скроллинг недосткпен).

Так как-то …
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

dest, будем честны, этот скрипт в первую очередь для тех, кто любит пользоваться мышкой, что подчёркнуто и названием. Вот я им (скриптом) практически не пользуюсь, а пекусь о его судьбе только потому, что в своё время вложился в него интеллектуальным трудом и ощущаю себя в какой-то степени соавтором.
dest wrote: Mon 25 Dec, 2023 17:15 на клавиатуре нажал Alt-TT и появились эти стрелки, а руки всё так же на клавиатуре
Основной способ вызвать скрипт в диалоговом режиме — это щёлкнуть ПКМ (правой кнопкой мыши) в заголовок панели.
dest wrote: Mon 25 Dec, 2023 17:15 пришлось брать мышку и клацать по ним, пытаться понять, что же они делают и зачем нужны
Правильно, они преимущественно именно для тех, кто держит руку на мышке.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Mon 25 Dec, 2023 17:36 В зависимости от (влезает или нет) использую цвета COL_MENUARROWS (не влезает) или COL_MENUARROWSDISABLED (влезает; скроллинг недосткпен).
Да, я что-то такое и имел в виду. Эти кнопки выглядят запрещёнными, подавая ясный сигнал, что путь виден целиком. Ну а то, что они при этом сохраняют свою функцию (сохраняют же?) — это приятный бонус.
Можно и дальше развить идею: справа/слева независимо показывать серую кнопку, если в данный момент в эту сторону прокрутки нет, а если есть — жёлтую. Тогда будет ещё нагляднее, а «влезает целиком» — лишь частный случай. (Кажется, я что-то такое уже предлагал раньше, лень искать.)
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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