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

Здесь обсуждается всё, что касается макросов.
User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

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

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

Last edited by Xerox on Fri 03 Jan, 2020 08:52, edited 47 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

Latest post of the previous page:

Shmuel, Интересно.
АльтФ2 - это меню дисков ведь?
И АльтВлево - это ужатие моим макросом?
У меня не воспроизводится..
А, дошло
Так вы же его размер в ноль сужаете )
Ну я бы сказал, что человек желающий превратить ширину диалога в ноль,
вполне заслуженно получает вылет ФАРа,
в принципе это и есть желаемый результат )
В принципе и в скрипт можно предусмотреть проверку MinWidth > 0,
но я посчитал что незачем, - типа пусть убивают/ся таким способом, если хочется )

citRiks, отпишитесь еще раз верно ли мы тут воспроизводим/понимаем ваши сценарии?
Last edited by Xerox on Fri 13 Dec, 2019 22:30, edited 3 times in total.

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox wrote:
Fri 13 Dec, 2019 22:19
верно ли мы тут воспроизводим/понимаем ваши сценарии?
Да, верно. У Shmuel`я сценарий падения Фара при обработке скриптом меню дисков описан очень точно. И, кроме того, Фар падает также и при активации пользовательского макроса в уменьшенном скриптом диалоге (проверено на диалогах "Копировать", "Переместить", "Создание папки").

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox wrote:
Fri 13 Dec, 2019 20:58
так можно и посмотреть на какой он стороне, и потом расширить обратно
Верно. Так можно. Однако и допинформация меню дисков не помешала бы, а то малоинформативно: "Диск". Предпочтительно бы: "Диск левой активной панели", например.

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox wrote:
Fri 13 Dec, 2019 21:00
citRiks wrote:
Fri 13 Dec, 2019 20:08
У меня вот такой регексп для макроса сабжевого скрипта работает:..
это спасибо, кладу в скрипт закомментированным
Прошу прощения, но я, кажется, поторопился с регекспом. Вышеприведённый правда работу сабжевого макроса обеспечивает, однако при этом перестают работать стрелочки в обрабатываемом диалоговом окне.
Привожу исправленный вариант регекспа:

Code: Select all

key="/(.Ctrl)?(.Alt(Right|Left|Up|Down))|(F2)/";
Так и сабжевый макрос работает, и стрелочки в окне тоже.

И насчёт положить вариант ключа в скрипт закомментированным это Вы, на мой взгляд, удачно придумали. Если в макросах дублировать ключи, заданные регекспами, закомментированными ключами с обычными перечислениями клавиш и их сочетаний, то такие макросы легко будут находиться по их ключам.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks,
В общем я сделал прислонение вправо или влево
Менять заголовок вроде можно, но там и относительно сложный АПИ для этого,
например есть GetDialogTitle, но нет SetDialogTitle, начинаются неясности,
и 2.) вмешиваемся в надписи, а может быть поломан другой макрос зависящий от этих надписей, например ищущий диалог с заголовком "Change drive"
В то же время прислонять диалого вправо или влево - это просто немного математики,
и 2.) более универсальный подход,
Last edited by Xerox on Sat 14 Dec, 2019 10:58, edited 1 time in total.

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox wrote:
Sun 08 Dec, 2019 11:17
dialog-ReXiZeR.lua.20191214.7z
Повторилась ситуация:
Xerox wrote:
Wed 11 Dec, 2019 08:10
citRiks писал(а): ↑
Ср 11 дек, 2019 04:33
C:\FarTest86\Profile\Macros\scripts\dialog-resizer.lua:283: attempt to call global 'wopds' (a nil value)

Это типа tracing у меня там, надо удалить все строчки где есть wopds
Закомментировал 2 строчки и ошибка ушла.
Xerox wrote:
Sat 14 Dec, 2019 10:57
сделал прислонение вправо или влево
Да, так стало существенно лучше. Спасибо.

Пока обзор сделал лишь бегло, попозже посмотрю внимательнее и отпишусь.

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox wrote:
Sun 08 Dec, 2019 11:17
dialog-ReXiZeR.lua.20191214-1400.7z
В реализации прислонения дискового диалога, вызываемого по AltF2, обнаружился негативный нюанс. Первым шагом действия скрипта после вызова дискового диалога этот диалог прыгает с правой панели на левую, а затем, следующим шагом, возвращается назад и дальнейшими шагами последовательно расширяется до максимального размера и возврата к исходному размеру. После чего вновь прыгает на левую панель и далее по кругу.
— виноват, на чистом профиле не воспроизводится; видимо какой-то макрос или плагин вмешиваются; буду искать.
Нет, всё верно оказалось, и на чистом профиле воспроизводится. И вполне согласуется с ниже приведёнными Вами соображениями по этому поводу.
С дисковым диалогом, вызываемым по AltF1, прыжки не наблюдаются. И с AltF1 прыжки наблюдаются также.

Вижу, что в текущей версии макроса скрипта отсутствует кондишн, присутствовавший в предыдущей сегодняшней версии:

Code: Select all

condition = function(key) return true; end;
Но я не понимаю механизм данного кондишна. Если не сложно, поясните, пожалуйста, принцип его действия. И с какой целью предполагалось его применение?
Last edited by citRiks on Sat 14 Dec, 2019 18:20, edited 2 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks,
по поводу неправильных прыганий вот что может быть
1.) Вы открыли по АльтФ1 скажем
2.) Вы стрелками задали кастомную диспозицию.
2.1.) Как "кастомизация" воспринимается любой сдвиг/расширение стрелками, и даже если вы его потом вернули на место.
2.1.) (туду: Впрочем может быть если вернуть его стрелками точно в оригинал, то стоит сделать отмену кастомизации, но это не сильно поможет этому потенциальному нюансу)
3.) Вы закрыли этот дисковый диалог так иначе. А кастомизация то запомнилась
4.) А теперь вы делаете АльтФ2
4.1.) В ФАРе правый и левый диск. меню (диалог) это одно и то же окно, ГУИД тот же,
может где и отличается, только я не знаю где (? - вопрос знатокам)
5.) И теперь у этого диалога имеется заполнная кастомизация из пункта (2.)
6.) Так как скрипт помнит и последний режим и кастомизацию (сдвиг/размер), то варианты такие:
6.1.) Вариант когда последний диск. диалог был в кастомном режиме - диск. диалог на другую сторону так откроется, как запомнено в кастомизации, т.е. на неправильной стороне
6.2.) Вариант когда последний диск. диалог был в другом режиме - поведение будет более ожидаемым.
Last edited by Xerox on Sat 14 Dec, 2019 16:36, edited 2 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks wrote:
Sat 14 Dec, 2019 15:09
Но я не понимаю механизм данного кондишна. Если не сложно, поясните, пожалуйста, принцип его действия. И с какой целью предполагалось его применение?
Это общий механизм для всех макросов, макрос вызывается при условиях осуществления:
1.) Мы находимся и вызываем макрос с соответсующего макросу AREA
2.) Мы нажали соответстующую кнопкосочетание
3.) Для пущей гибкости ситуация опционально может дополнительно проверятся с помощью функции condition,
про которую вы и спросили

condition - опциональный, но если он есть, должен вернуть "истину" или "ложь"
если всегда возвражает истину (как у нас и было до чистки) то никакого влияния не оказывает,
если всегда ложь - то action никогда не запустится

Какие могут быть соображения
1.) С одной стороны, проверку вуыполнять или нет можно сделать и в самом макросе, но:
2.) Возможно что проверять в condition не заходя в action лучше для производительности,
3.) .. однако это спорно, и можно проверить и в самом action, и выйти если нужно
4.) Но, condition получает вызванный key (вызвавшее кнопконажатие)
и наверное может сделать какую-то логику на нем если надо,
а action не получает ничего
5.) Возможно есть еще какие соображения какие я успустил/забыл тут

Наиболее весомым в пользу кондишна это то что там можно реализовать любую сколь угодно сложную или гибкую логику
Но она не всегда нужна, поэтому обычно без кондишиона
Last edited by Xerox on Sat 14 Dec, 2019 18:46, edited 5 times in total.

User avatar
zg
zero-gravity
Posts: 5726
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 135 times
Contact:

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

Post by zg »

Xerox wrote:
Sat 14 Dec, 2019 16:45
5.) Возможно есть еще какие соображения какие я успустил/забыл тут
если несколько макросов претендуют на одну кнопку, выводится меню. без кондишена макрос попадает всегда, с — только, когда реально хочет исполниться.

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox wrote:
Sat 14 Dec, 2019 16:33
по поводу неправильных прыганий вот что может быть
Да, эти Ваши соображения вполне верны, т.к. практикой подтверждаются на чистой ночной сборке. Спасибо за эти пояснения.
Xerox wrote:
Sat 14 Dec, 2019 16:45
citRiks писал(а): ↑
Сб 14 дек, 2019 17:09
Но я не понимаю механизм данного кондишна. Если не сложно, поясните, пожалуйста, принцип его действия. И с какой целью предполагалось его применение?

Это общий механизм для всех макросов
Благодарю Вас за разъяснения. Ну и запутанные же задачи приходится Вам решать. Особенно судя по последним постам.

Shmuel
Posts: 6035
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 27 times
Been thanked: 295 times

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

Post by Shmuel »

Некоторые уточнения насчёт condition, с вашего позволения.
1. На кнопкосочетание может претендовать не только макрос, но и Фар. В этом случае, если condition вернёт false, макрос не будет исполняться, а будет исполнена команда Фара.

2. Отсутствие condition или возврат true из неё означают результирующий приоритет макроса 50 по 100-балльной шкале (если поле priority отсутствует).

3. Меню выбора макроса выводится только в случае наличия более одного макроса с одинаковым наибольшим результирующим приоритетом.
Last edited by Shmuel on Sat 14 Dec, 2019 19:17, edited 1 time in total.

buniak_a_h
Posts: 1444
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 103 times
Been thanked: 118 times
Contact:

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

Post by buniak_a_h »

Shmuel, ну тогда ещё дополнение:
Shmuel wrote:
Sat 14 Dec, 2019 19:14
возврат true из неё означают результирующий приоритет макроса 50…
А если condition возвращает число, то это число и есть приоритет. Ну, правда, всё это есть в документации, но раз уж решили переписать сюда …

citRiks
Posts: 292
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 99 times
Been thanked: 26 times

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

Post by citRiks »

Xerox,

В перечень макрообластей действия сабжевого скрипта включена в т.ч. и MainMenu. И если скрипт активировать в развёрнутом Главном меню, то он работает как обычно. Включая провоцирование Фара на падения при попытках с помощью текущей версии скрипта (dialog-ReXiZeR.lua.20191214-1400.7z) последовательно уменьшать размеры выпадающих меню. А при попытке активации скрипта в неразвёрнутом Главном меню (когда видна только строка "Левая Файлы Команды Параметры Правая") выскакивает .

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks, интересно, но кажется знаю в чем дело и лечится легко, думаю сегодня-завтра

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks wrote:
Sat 14 Dec, 2019 18:30
Благодарю Вас за разъяснения. Ну и запутанные же задачи приходится Вам решать. Особенно судя по последним постам.
Та не, во Рошаль на досуге например аж целый ФАР написал, это не фунт изюму.
А в девелопменте есть основной фактор сложности или наоборот, прозиводительности программера,
это эффективный инструмент дебаггинга, debugging experience.
Ну там где ты можешь сделать break, step over, step in, видеть там locals/variables, environment, callstack, & whatever needed.
Если по уму, то перед любым программингом, особенно новым, надо освоить возможности дебаггинга, это в разы экономит время и нервы.
Last edited by Xerox on Sun 15 Dec, 2019 10:53, edited 1 time in total.

Post Reply

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