Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли
Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли
ВВИДУ ОТСУТСТВИЯ ОБЩЕСТВЕННОГО ИНТЕРЕСА (нет лайков)
ОБНОВЛЯТСЯ В ДАЛьНЕЙШЕМ НЕ БУДЕТ
(текущая/экспериментальная/обновленная версия находится у меня,
но дальнейшей синхронизации скорее всего не будет
если все-же. кому чего нужно, то пишите сюда,
скорее всего отвечу, и скорее всего быстро)
Предыстория вопроса
Современный мир характеризуется большим количеством больших экранов.
А также длинными именами файлов, и прочими "многа букав"
В то же время, размер диалоговых окон в ФАРе, не менялся десятилетиями,
обладая слишком малой величиной, чтобы полностью соответствать современным вызовам.
Более того, не было никакой возможности расширить окошки до приемлимых размеров даже вручную.
Но эти эти горести остались в далеком темном прошлом (смахивает слезу)
поскольку сейчас у нас есть Автоматический Раздвигатель Окон!
https://github.com/dr-dba/far-lua-dialogs-control
Этот "мануал/ридми" старый и не отражает всего функционала.
вопросы, пожелания - писать, опять же, см. начало текста
ОБНОВЛЯТСЯ В ДАЛьНЕЙШЕМ НЕ БУДЕТ
(текущая/экспериментальная/обновленная версия находится у меня,
но дальнейшей синхронизации скорее всего не будет
если все-же. кому чего нужно, то пишите сюда,
скорее всего отвечу, и скорее всего быстро)
Предыстория вопроса
Современный мир характеризуется большим количеством больших экранов.
А также длинными именами файлов, и прочими "многа букав"
В то же время, размер диалоговых окон в ФАРе, не менялся десятилетиями,
обладая слишком малой величиной, чтобы полностью соответствать современным вызовам.
Более того, не было никакой возможности расширить окошки до приемлимых размеров даже вручную.
Но эти эти горести остались в далеком темном прошлом (смахивает слезу)
поскольку сейчас у нас есть Автоматический Раздвигатель Окон!
https://github.com/dr-dba/far-lua-dialogs-control
Этот "мануал/ридми" старый и не отражает всего функционала.
вопросы, пожелания - писать, опять же, см. начало текста
Last edited by citRiks on Fri 27 Aug, 2021 11:25, edited 50 times in total.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
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.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Да, верно. У Shmuel`я сценарий падения Фара при обработке скриптом меню дисков описан очень точно. И, кроме того, Фар падает также и при активации пользовательского макроса в уменьшенном скриптом диалоге (проверено на диалогах "Копировать", "Переместить", "Создание папки").
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Верно. Так можно. Однако и допинформация меню дисков не помешала бы, а то малоинформативно: "Диск". Предпочтительно бы: "Диск левой активной панели", например.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Прошу прощения, но я, кажется, поторопился с регекспом. Вышеприведённый правда работу сабжевого макроса обеспечивает, однако при этом перестают работать стрелочки в обрабатываемом диалоговом окне.
Привожу исправленный вариант регекспа:
Code: Select all
key="/(.Ctrl)?(.Alt(Right|Left|Up|Down))|(F2)/";
И насчёт положить вариант ключа в скрипт закомментированным это Вы, на мой взгляд, удачно придумали. Если в макросах дублировать ключи, заданные регекспами, закомментированными ключами с обычными перечислениями клавиш и их сочетаний, то такие макросы легко будут находиться по их ключам.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
citRiks,
В общем я сделал прислонение вправо или влево
Менять заголовок вроде можно, но там и относительно сложный АПИ для этого,
например есть GetDialogTitle, но нет SetDialogTitle, начинаются неясности,
и 2.) вмешиваемся в надписи, а может быть поломан другой макрос зависящий от этих надписей, например ищущий диалог с заголовком "Change drive"
В то же время прислонять диалого вправо или влево - это просто немного математики,
и 2.) более универсальный подход,
В общем я сделал прислонение вправо или влево
Менять заголовок вроде можно, но там и относительно сложный АПИ для этого,
например есть GetDialogTitle, но нет SetDialogTitle, начинаются неясности,
и 2.) вмешиваемся в надписи, а может быть поломан другой макрос зависящий от этих надписей, например ищущий диалог с заголовком "Change drive"
В то же время прислонять диалого вправо или влево - это просто немного математики,
и 2.) более универсальный подход,
Last edited by Xerox on Sat 14 Dec, 2019 10:58, edited 1 time in total.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Повторилась ситуация:
Закомментировал 2 строчки и ошибка ушла.
Да, так стало существенно лучше. Спасибо.
Пока обзор сделал лишь бегло, попозже посмотрю внимательнее и отпишусь.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
В реализации прислонения дискового диалога, вызываемого по 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.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
citRiks,
по поводу неправильных прыганий вот что может быть
1.) Вы открыли по АльтФ1 скажем
2.) Вы стрелками задали кастомную диспозицию.
2.1.) Как "кастомизация" воспринимается любой сдвиг/расширение стрелками, и даже если вы его потом вернули на место.
2.1.) (туду: Впрочем может быть если вернуть его стрелками точно в оригинал, то стоит сделать отмену кастомизации, но это не сильно поможет этому потенциальному нюансу)
3.) Вы закрыли этот дисковый диалог так иначе. А кастомизация то запомнилась
4.) А теперь вы делаете АльтФ2
4.1.) В ФАРе правый и левый диск. меню (диалог) это одно и то же окно, ГУИД тот же,
может где и отличается, только я не знаю где (? - вопрос знатокам)
5.) И теперь у этого диалога имеется заполнная кастомизация из пункта (2.)
6.) Так как скрипт помнит и последний режим и кастомизацию (сдвиг/размер), то варианты такие:
6.1.) Вариант когда последний диск. диалог был в кастомном режиме - диск. диалог на другую сторону так откроется, как запомнено в кастомизации, т.е. на неправильной стороне
6.2.) Вариант когда последний диск. диалог был в другом режиме - поведение будет более ожидаемым.
по поводу неправильных прыганий вот что может быть
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.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Это общий механизм для всех макросов, макрос вызывается при условиях осуществления:
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.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
если несколько макросов претендуют на одну кнопку, выводится меню. без кондишена макрос попадает всегда, с — только, когда реально хочет исполниться.
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Да, эти Ваши соображения вполне верны, т.к. практикой подтверждаются на чистой ночной сборке. Спасибо за эти пояснения.
Благодарю Вас за разъяснения. Ну и запутанные же задачи приходится Вам решать. Особенно судя по последним постам.
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Некоторые уточнения насчёт condition, с вашего позволения.
1. На кнопкосочетание может претендовать не только макрос, но и Фар. В этом случае, если condition вернёт false, макрос не будет исполняться, а будет исполнена команда Фара.
2. Отсутствие condition или возврат true из неё означают результирующий приоритет макроса 50 по 100-балльной шкале (если поле priority отсутствует).
3. Меню выбора макроса выводится только в случае наличия более одного макроса с одинаковым наибольшим результирующим приоритетом.
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: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Shmuel, ну тогда ещё дополнение:
А если condition возвращает число, то это число и есть приоритет. Ну, правда, всё это есть в документации, но раз уж решили переписать сюда …
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Xerox,
В перечень макрообластей действия сабжевого скрипта включена в т.ч. и MainMenu. И если скрипт активировать в развёрнутом Главном меню, то он работает как обычно. Включая провоцирование Фара на падения при попытках с помощью текущей версии скрипта (dialog-ReXiZeR.lua.20191214-1400.7z) последовательно уменьшать размеры выпадающих меню. А при попытке активации скрипта в неразвёрнутом Главном меню (когда видна только строка "Левая Файлы Команды Параметры Правая") выскакивает .
В перечень макрообластей действия сабжевого скрипта включена в т.ч. и MainMenu. И если скрипт активировать в развёрнутом Главном меню, то он работает как обычно. Включая провоцирование Фара на падения при попытках с помощью текущей версии скрипта (dialog-ReXiZeR.lua.20191214-1400.7z) последовательно уменьшать размеры выпадающих меню. А при попытке активации скрипта в неразвёрнутом Главном меню (когда видна только строка "Левая Файлы Команды Параметры Правая") выскакивает .
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
citRiks, интересно, но кажется знаю в чем дело и лечится легко, думаю сегодня-завтра
Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг
Та не, во Рошаль на досуге например аж целый ФАР написал, это не фунт изюму.
А в девелопменте есть основной фактор сложности или наоборот, прозиводительности программера,
это эффективный инструмент дебаггинга, 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.