Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Здесь обсуждается всё, что касается макросов.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by citRiks »

Предыстория вопроса
Современный мир характеризуется большим количеством больших экранов.
А также длинными именами файлов, и прочими "многа букав"
В то же время, размер диалоговых окон в ФАРе, не менялся десятилетиями,
обладая слишком малой величиной, чтобы полностью соответствать современным вызовам.
Более того, не было никакой возможности расширить окошки до приемлимых размеров даже вручную.
Но эти эти горести остались в далеком темном прошлом (смахивает слезу)
поскольку сейчас у нас есть Автоматический Раздвигатель Окон!

https://github.com/dr-dba/LUA-FAR-STUFF ... .XeR0X.Lua

Last edited by HaRT on Wed 24 Feb, 2021 14:58, edited 48 times in total.
Reason: Улучшен Заголовок Темы
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
LAT
Posts: 340
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 21 times
Been thanked: 38 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by LAT »

Latest post of the previous page:

Last edited by LAT on Wed 29 Apr, 2020 18:29, edited 1 time in total.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

LAT, skipik,
Ну вот, при XeRoX'e такого не было
и что теперь будем делать без него?
Может надо дождаться стабильного билда?
Или уже сейчас кричать "усе пропало шеф"?
Думаю что работа с УТФ8 порушена как следует.
Я больше получаю ошибку что-то вроде "ошибка диагностики в процедуре диагностики",
но .. сейчас кажется уже не повторяются ошибки, не могу даже скопипастить
Last edited by citRiks on Thu 30 Apr, 2020 04:27, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

ваш багрепорт все равно помог однако, тут вот какая штука:
раньше win.Uuid():len() возвращал то что надо - длина говорит строки 15 букав.
Ну потому что GUID, какой бы он ни был, это все таки строка.
binary data у нас в Lua нет однако, есть UserData, но это не в эту дырку суется.
А теперь win.Uuid():len() возвращает черти че, можете проверить.

И кто ответит, как с этим жить, это баг или фича теперь?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Однако, предварительный фикс кажется что состоит в этом:

Code: Select all

function fnc_norm_guid(the_guid)
	if not the_guid	then return end
	local the_type = type(the_guid)
	if the_type == "number" or the_type == "userdata" then return end
	if	type(the_guid) == "string" and the_guid:len() == nil or
		the_guid:len() <= 16 -- can be less than 16
	then 	the_guid = win.Uuid(the_guid)
	end
	if 	the_guid == GUID_ZERO or not the_guid
	then	return
	else	return the_guid:upper()
	end
end
Но вопрос остается, сейчас "строковый механизьм" (или как это называется?)
творит по-моему фигню, конвертирует в УТФ8 по умолчанию что ли?
lua:=utf8.len(win.Uuid()) однако тоже не помогает
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2851
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

citRiks wrote: Thu 30 Apr, 2020 04:32 И кто ответит, как с этим жить, это баг или фича теперь?
Замените win.Uuid():len() на string.len(win.Uuid()) - и будет Вам Щястие Велиое.
Подсказка от jd в другом месте, но причина, думаю, та же, и лекарство то же.
Last edited by buniak_a_h on Thu 30 Apr, 2020 04:50, edited 1 time in total.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

прилагается пофиксенная версия имени А. Буняк
Вроде все работает так
Attachments
Dialog_ReXiZeR.v1-2-2.@Xer0X.Lua.7z
(8.37 KiB) Downloaded 40 times
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe,
Не показан практический сценарий, когда производительности DM_GETDLGITEM недостаточно
Если же реальный сценарий обнаружится - надо будет разобраться где именно узкое место.
Не исключено, что проблема только в производительности Lua.
в этом скрипте напрасно крадется 100 милисекунд у юзера и несколько мегабайтов у компа на каждом открытии истории
этот скрипт должен читать все элементы по ряду причин.
и надо облегчить это чтение, избавив от ненужных списков.

в новой (еще не опубликованной, только у меня) версии кстати @Xer0X сделал запоминание последнего выбранного элемента во всех менюхах.
вот это очень удобно я вам скажу.
в потенциале Говорит несложно приделать еще запоминание значений полей,
т.е. это будет как бы автозаполнение.
Говорит сделать то можно, но вроде как не нужно.
и еще запоминание alignment-а
правда все это (alignment) очень на будущее, так как сейчас в ФАРе нет always-on-top,
а значит потребность аранжировать окошки не очень возникает, хотя возникает все же.

в новой (еще не опубликованной, только у меня) версии кстати @Xer0X сделал запоминание последнего выбранного элемента во всех менюхах.
вот это очень удобно я вам скажу.
в потенциале, говорит, несложно приделать еще запоминание значений полей,
т.е. это будет как бы автозаполнение.
Говорит сделать то можно, но вроде как не нужно.
и еще запоминание alignment-а
правда все это (alignment) очень на будущее, так как сейчас в ФАРе нет always-on-top,
а значит потребность аранжировать окошки не очень возникает, хотя возникает все же.

А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
John Doe
Бюрократ
Posts: 13231
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 45 times
Been thanked: 335 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by John Doe »

citRiks wrote: Sun 10 Jan, 2021 12:09 этот скрипт должен читать все элементы по ряду причин
Вы имеете ввиду, что этому скрипту нужно знать только актуальные размеры листбокса? Он не пытается их изменить под самый широкий элемент списка?
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

John Doe wrote: Sun 10 Jan, 2021 14:13 Вы имеете ввиду, что этому скрипту нужно знать только актуальные размеры листбокса? Он не пытается их изменить под самый широкий элемент списка?
актуальные размеры надо знать, конечно
Под самый широкий размер элемента списка не надо адаптировать,
потому что "display size" и "capacity size" слава Богу что не одно и то же в ФАРе
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

можно было бы наверное обойтисть "DM_GET(+SET)ITEMPOSITION", но засада в том что тогда не будет текста (значения) элемента, который тоже нужен (нужен например для запоминания)
можно все добывать по отдельности, наверное, но это менее неэффективно чем получить все "одиночные" (не списковые) значения сразу
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
RoxMarty
Posts: 68
Joined: Sat 08 Dec, 2012 18:50
Has thanked: 16 times
Been thanked: 3 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by RoxMarty »

Я прошу прощения, всю тему не читал, последние страницы просмотрел и не очень понял... хотелось бы прояснить немного. (Как я понял, автора забанили, это печально)

У меня давно скачанный скрипт версии: 1.1.1 (судя по INFO BLOCK). Решил проверил обновления сейчас - из шапки ссылка на гитхаб нерабочая (как понял из комментариев здесь, автор и оттуда ушёл).

В сообщении на этой странице есть некая "пофиксенная версия имения А. Буняк" - это и есть последняя версия? (кстати, с ней FAR при запуске выдаёт ошибку типа не найден "CRC32-@XeR0X"...)
Или где можно скачать последнюю?

Попутно вопрос, есть плагин "Визуальное переименование файлов" (VisRen) и там клавиша F5 дефолтно используется для раздвижения по горизонтали+вертикале своего окна, однако данный скрипт перебивает сие действие на себя и расширяет только по горизонтали (ибо макрос на F5 зашит). Можно ли сделать исключение для данного плагина данному скрипту? И как?
Last edited by RoxMarty on Mon 18 Jan, 2021 20:59, edited 1 time in total.
Win 10 x64 / FAR 3 x64
buniak_a_h
Posts: 2851
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

RoxMarty wrote: Mon 18 Jan, 2021 20:57 Можно ли сделать исключение для данного плагина данному скрипту? И как?
Укажите в condition дополнительное условие Dlg.Id ~= "AD50A5CA-1E33-4E24-9A51-97A481D41F56"
RoxMarty
Posts: 68
Joined: Sat 08 Dec, 2012 18:50
Has thanked: 16 times
Been thanked: 3 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by RoxMarty »

buniak_a_h wrote: Mon 18 Jan, 2021 22:15
RoxMarty wrote: Mon 18 Jan, 2021 20:57 Можно ли сделать исключение для данного плагина данному скрипту? И как?
Укажите в condition дополнительное условие Dlg.Id ~= "AD50A5CA-1E33-4E24-9A51-97A481D41F56"
Как именно?

Вижу в коде две строки с condition

Code: Select all

condition = function(evt, fde) return true; end;
и

Code: Select all

condition = function()
Куда добавить код? Пробовал следующими строками, но выдаётся ошибка
╔═══════════════════════════════════════ LuaMacro ══════════
...ile\Macros\scripts\Dialog_ReXiZeR.XeR0X_FixForVisRen.Lua:494: '=' expected near '~=
Win 10 x64 / FAR 3 x64
buniak_a_h
Posts: 2851
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

RoxMarty wrote: Tue 19 Jan, 2021 10:44Как именно?
1. Запустить у себя я не смог, т.к. не нашёл модуля CRC32-@XeR0X.lua. В архиве его нет, а по всей теме искать недосуг. Поэтому дальнейшие изыскания носят теоретический характер.
2. Нашёл один макрос, "повешенный" на F5. Это тот, что начинается в строке 780. Если я прав (а проверить - легко: вставьте в функцию action строчку far.Show('Оно!') ), то вставить можо в строку 787 (там, где return). должно быть примерно так:
return <то_что_я_писал> and (<старое_значение>)
Last edited by buniak_a_h on Tue 19 Jan, 2021 11:10, edited 1 time in total.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

RoxMarty wrote: Mon 18 Jan, 2021 20:57 В сообщении на этой странице есть некая "пофиксенная версия имения А. Буняк" - это и есть последняя версия? (кстати, с ней FAR при запуске выдаёт ошибку типа не найден "CRC32-@XeR0X"...)
Или где можно скачать последнюю?
да, это и есть последняя.
CRC32 можно найти из предыдущих аттачментов идя по обсуждению назад в обратном временном порядке
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1444
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

RoxMarty wrote: Mon 18 Jan, 2021 20:57 Можно ли сделать исключение для данного плагина данному скрипту? И как?
А. Буняк правду говорит
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

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