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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 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.11.
  1. Исправлена ошибка процедуры настройки, в результате которой не сохранялась «горячая клавиша» вызова диалогового окна.
  2. В настроечном диалоге вызов сервиса ввода «горячей клавиши» теперь вызывается по Ctrl+↓ в поле текстового ввода
ClickToTitleDir-1.4.11.7z
(25.03 KiB) Downloaded 25 times

Вместе с файлом самого скрипта поставляются языковые файлы ClickToTitleDirRus.lng и ClickToTitleDirEng.lng и файл помощи ClickToTitleDirRus.hlf.
Last edited by buniak_a_h on Tue 19 Jan, 2021 23:50, edited 68 times in total.
citRiks
Posts: 1316
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 388 times
Been thanked: 80 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: 9695
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 254 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
citRiks
Posts: 1316
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 388 times
Been thanked: 80 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: 9695
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 254 times

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

Post by HaRT »

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

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

Post by citRiks »

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

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: 13075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 42 times
Been thanked: 319 times

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

Post by John Doe »

citRiks wrote: Thu 21 Jan, 2021 01:07 а я сейчас тестирую без макросов, вроде есть успехи
С этого надо было начинать.
Очень может быть что (в разных скриптах) у вас присутствуют два отличающихся определения ffi.
Это проглатывается молча, но срабатывает только первое.
https://t.me/FarManager — Telegram чат
citRiks
Posts: 1316
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 388 times
Been thanked: 80 times

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

Post by citRiks »

перенесено в тему сюда во избежание офтопика:
viewtopic.php?p=164235#p164235
Last edited by citRiks on Thu 21 Jan, 2021 11:33, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 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.
Post Reply

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