Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Code Viewer - просмотр исходного кода
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
yozhik



Joined: 04 May 2014
Posts: 219
Location: Электросталь

Post (Separately) Posted: Fri May 24, 2024 20:31    Post subject: Reply with quote

Orion9 wrote:
Не являюсь специалистом по написанию плагинов и детект-строк к ним. Это надо было в справку лезть.

Не надо лезть, конспект лучше возьмите Smile
 Конспект по детект-строке и не только
Лучше когда он под рукой, т.к. нередко бывает, что нужно что-то подправить в ДС. Ну, и вообще ясности больше, когда хоть раз прочтёшь всё подряд.

olegvsk wrote:
Так построен исходный компонент

Ага, я так же приблизительно и понял, что мы тут имеем дело не с чистым белым листом, а с уже готовой системой, логика которой хоть и несколько непривычна, но внутренне не противоречива — вот это то и главное, что в ней самой нет противоречий, а это значит что перекраивать её — дело долгое и часто неблагодарное, поломаешь больше, чем наладишь. Тут два пути: либо отказаться от неё и строить своё с нуля, либо вникнуть в неё и попытаться подстроиться. 2й тип пути тоже интересный, потому что часто оказывается, что новый ракурс не хуже, чем был до этого ))

Добро, я попытаюсь переформулировать пожелания Orion9, как я их понял (если что, поправьте, пожалуйста). Но придётся излагать постепенно, блоками, чтобы не валить в кучу. Начнём со шрифтов. Только со шрифтов (т.к. с цветом дела более разветвлённые).

Для примера посмотрим как устроен AkelPad. Схема в AkelPad иерархическая, где умолчания задаются верхним уровнем:
  1. Первый уровень (он же верхний) — настройки шрифта редактора: гарнитура, размер, стиль — глобальные, распространяются на все нижние уровни.
  2. Второй уровень — настройки тем: три переменные ${HighLight_FontStyle} ${HighLight_FontSize} ${HighLight_FaceName} локальные, но действие распространяется также на всё подмножество нижнего уровня (точнее «полуглобальные»: вниз да, вверх нет). Если в перем. 2го уровня пусто, или ноль, то значение заимствуется из верхнего уровня.
  3. Третий уровень — настройки кодеров (хайлайтеров): опять те же перем. ${HighLight_FontStyle} ${HighLight_FontSize} ${HighLight_FaceName}, чисто локальные, распространяются только на данный кодер. Если в перем. 3го уровня пусто, то значение заимствуется из верхнего уровня, т.е. из 2го, а если пусто во 2м, то из 1го.
  4. Исходное состояние настроек (т.с. из коробки):
    • На 1м уровне прописаны начальные гарнитура (Courier New), размер (10), стиль.
    • На 2м и 3м пусто, т.е. всё наследуется из 1го.
    • Пользователь настраивает 1й уровень, глобально, а затем, спускаясь вниз, корректирует настройки на 2м и 3м: если хочет, то может это сделать отдельно для каждой темы, а затем и отдельно для каждого хайлайтера.
  • «Философия» схемы: более удобна для того, чтобы пользователь использовал сразу несколько тем, регулярно переключаясь между ними по настроению. Исходное множество тем для него — простор для переключений.

А как в плагине?
  1. Первый уровень: настройки глобальные, распространяются на всё подмножество нижнего уровня. Этот уровень нередактируемый, как я понял — значения прописаны в коде плагина.
  2. Второй уровень: настройки тем. У каждой темы свои настройки, но если удалить один из параметров (это делается только вручную, в Тема.json, просто удаляется всё, что в кавычках: "Consolas" -> "" или "9" -> ""), то он заимствуется из верхнего уровня.
  3. Третий уровень: настройки хайлайтеров. Своих настроек шрифта здесь нет, всё заимствуется из верхнего уровня.
  4. Исходное состояние настроек:
    • Уровень 1й есть, но он нередактируемый.
    • Редактирование начинается со 2го уровня. У каждой темы свои настройки шрифта, т.е. фактически 2й уровень становится 1ым, но отсчёт ведётся как-бы не от одной вершины, а от нескольких вершин.
    • Пользователь просматривает все темы, выбирает себе подходящую базовую и на её основе строит свою собственную. Если пользователь хочет поменять тему (вершину), то ему нужно повторить процесс настроек сначала, как в предыдущей теме, отталкиваясь уже от другой вершины.
  • «Философия» схемы: более удобна для того, чтобы пользователь настроил себе одну тему и далее пользовался ей регулярно, по преимуществу. Исходное множество тем для него — простор для единоразового выбора одной, своей постоянной.

Пожелание Orion9 в том, чтобы сделать так, как в AkelPad. Т.е. поменять «философию». Если olegvsk согласен менять «философию», то в CodeViewer потребуется добавить:
  • Сделать 1й уровень редактируемым:
    • Либо расположить его в CodeViewer.ini, но тогда придётся делать для него отдельную вкладку в диалоге Settings, потому что настроек у шрифта много.
    • Либо расположить его в Default.json и использовать имеющийся Theme-редактор, но тогда, учитывая, что потом в рамках изменённой «философии» понадобится корректировать ещё и работу с цветом, придётся делать два дефолта (две вершины): Default_Light.json и Default_Dark.json.
  • Отладить обработку нулевых значений в шрифтовых ключах тем (0 для числовых и <none> для строковых), чтобы работала схема заимствования из верхнего редактируемого уровня.
  • Добавить в редактор тем возможность устанавливать нулевые значения: <none> в выпадающих списках гарнитур, и 0 в числовых переключателях.
  • Исходное (из коробки) состояние настроек тогда имеет смысл сделать таким:
    • На 1м уровне (CodeViewer.ini или Default_*.json) прописаны начальные параметры: гарнитура, размер, стиль.
    • На 2м уровне во всех *.json параметры шрифтовых ключей по нулям.
Ну, как-то так, если пытаться конструктивно. Время только отнимает: у одного на написание, у остальных на чтение. Если появится желание двигаться в этом направлении, то можно и дальше так расписывать, с цветом (представление есть). А если не появится, то пусть этот пост станет памятником конструктивизму Smile
_________________
Amo ergo sum
Back to top
View user's profile Send private message
olegvsk



Joined: 17 Dec 2020
Posts: 93

Post (Separately) Posted: Fri May 24, 2024 21:31    Post subject: Reply with quote

yozhik
Мы имеем концепцию "Все настройки в одном файле (json)", вполне понятную и близкую и мне и, думаю, большинству пользователей. Аналог тех же стилей VCL, LookAndFeel в Java и тем несчётного числа IDE и редакторов. Проблема установки шрифта мне кажется надуманной, поскольку шрифт устанавливается для темы за несколько секунд.
Вот именно этого мне и не хватало в существующих средствах просмотра для TC - наглядной настройки тем и легкого назначения этих тем разным типам файлов (помимо простого назначения файловых ассоциаций, без копания в инишниках). Соответсвенно, плагин написан прежде всего по моим представлениям, как это должно работать, и менять что-то в архитектуре для меня смысла нет. Наверное, многие предпочтут другой подход, но, как заметил наш остроумный коллега выше, привычные альтернативы - есть. Так что продолжу дорабатывать плагин в сложившемся виде, конструктивная критика по-прежнему приветствуется.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 219
Location: Электросталь

Post (Separately) Posted: Fri May 24, 2024 23:36    Post subject: Reply with quote

olegvsk
Ну, вот, надеюсь, точки над «и» мы расставили Smile

Пара наблюдений:

Косячок в Theme-редакторе: Editor -> Common backgroung

Во время настройки цвета в Theme-редакторе: начинаю менять цвет -> активируется кнопка Save -> чтобы сохранить последние текущие изменения, нажимаю Save; а чтобы сбросить последние текущие изменения, закрываю редактор по Close или Esc. Может быть удобнее было бы добавить маленькую кнопку сброса, которая делала бы то же самое без закрытия редактора: сбрасывала изменения к состоянию до активации кнопки Save. Как-то так:

Т.е. если Save нажал, то уже не сбросишь, а если ещё не нажал, то можно. Это было бы удобнее в случае, когда настраиваешь элементы друг за другом по очереди, чтобы после каждой неудачной попытки не переоткрывать редактор.

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

Но чёрный — это не None. Чёрный — это отсутствие света, но не цвета. Не знаю что тут предложить. Для чего вообще замышлялся этот None?

Далее, в Editor -> Common Background (далее CB) None вроде бы оправдан, но если открыть этот список и снова выбрать тот же None, то все зависимые от Common элементы *Background зальются чёрным с именем None. Может было бы очевидней, если бы вместо None в CB значилось <mixed>. Т.е. если во всех зависимых от CB элементах цвет одинаковый, то в CB отображается этот цвет, а если хоть в одном зависимом элементе другой цвет, то в CB — <mixed>.
_________________
Amo ergo sum
Back to top
View user's profile Send private message
olegvsk



Joined: 17 Dec 2020
Posts: 93

Post (Separately) Posted: Sat May 25, 2024 00:49    Post subject: Reply with quote

yozhik wrote:
Косячок в Theme-редакторе: Editor -> Common backgroung
Поправил.

yozhik wrote:
добавить маленькую кнопку сброса
Сделаю.

yozhik wrote:
не понятно значение пункта None
Для разных настроек он работает по-разному. Например, для фона он даёт чёрный цвет, а для foreground выделения - прозрачность (видна расцветка синтаксиса).

yozhik wrote:
Common Background
Это не настройка, а просто "команда", заполняющая нужным значением цвета соответствующие настройки. <mixed> можно показать, согласен.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 300

Post (Separately) Posted: Sat May 25, 2024 18:43    Post subject: Reply with quote

yozhik
После такого разбора философий как-то и шутить больше не хочется Laughing

Вы правильно выразились: ваш пост - памятник коструктивизму. И разумеется, мы все ждем продолжения! ) Мне, например, интересен разбор хайлайтеров и самой темы подсветки, поскольку я не стал бы сводить проблему "на нет", говоря, что эта настройка занимает несколько секунд. Может, для знающего человека, который постоянно с этим работает и имеет большой опыт, это и выглядит довольно просто. Но новичку или обычному пользователю придётся попробовать и пощупать каждый параметр в отдельности, чтобы посмотреть, где и как отражается его изменение; побаловаться с цветами, чтобы найти для себя приемлемые; сохранить и еще потом не раз откатить всю тему, применив ее на других файлах и т.д и т.п. Какие же это секунды? Тут часами можно возиться. И именно это я имел в виду, когда говорил о танцах.

А что касается философии глобального шрифта, то она тут явно напрашивается, хотя и не является большой проблемой в действительности. Скорее просто "неудобством" при переключении на другие темы.

Опция Open any files - безусловно облегчила жизнь, но всё-равно считаю, что она должа быть включена по-умолчанию. Или нужна детект-строка (за шпору спасибо).

Кроме того, предложенной вами кнопки отмены мало - здесь нужна полноценная и широкоизвестная система дефолтных настроек с пометками измененных параметров и возможности отката каждого из них по отдельности. Почему автор компонента сразу это не сделал - остается только гадать, наверное, ему просто было лень. А вот автору плагина можно сказать только спасибо, что вообще решился взяться за это дело. И спешить тут не нужно. Если проект будет постоянно развиваться, то, думаю, со временем мало кому будет интересно Cuda уехал текст.)
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 300

Post (Separately) Posted: Sun May 26, 2024 11:54    Post subject: Reply with quote

olegvsk
Поймал при переключении между кодировками UTF8 и ANSI на простом ini-файле:
Quote:
No mapping for the Unicode character exists in the target multi-byte code page.


yozhik
Я как-то вчера размыто написал. В принципе, интересен ваш взгляд на настройку темы в плагине. Можно ли здесь провести такое же отличие в философиях с AkelPad (необязательно в подробных деталях). Правильно ли сейчас всё сделано, на ваш взгляд, в плагине в плане настройки тем?

Я, например, делаю тему на ini-файл. Секция - чёрный жирный, ключ - тёмно-синий, значение - чёрный, символ -красный, комментарий - зелёный. Остальное оставляю пока как есть. Подобный вариант мне более-менее нравится: для первой пробы сойдет. Тема смотрится неплохо на .inf, .reg и .bat файлах (хотя в AkelPad .bat смотрится, конечно, получше), но на .vbs уже есть проблемы, а про akh и говорить не приходится. Я так понимаю, здесь есть два варианта: либо дальше файнтюнить основную тему, что как кажется, занятие бесперпективное, либо для каждого синтаксиса делать свою отдельную тему, что является процессом более творческим и интересным. В общем, здесь всё упирается во время. Но, думаю, заняться этим можно. По крайней мере, попробовать.
Back to top
View user's profile Send private message
olegvsk



Joined: 17 Dec 2020
Posts: 93

Post (Separately) Posted: Sun May 26, 2024 14:45    Post subject: Reply with quote

Orion9 wrote:
No mapping for the Unicode character exists in the target multi-byte code page.

Обычное сообщение при невозможности показать текст (точнее, набор байт) в требуемой кодировке. Вы пытаетесь однобайтный ANSI перевести на двухбайтный UTF.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 300

Post (Separately) Posted: Sun May 26, 2024 18:16    Post subject: Reply with quote

olegvsk
Quote:
Обычное сообщение при невозможности показать текст (точнее, набор байт) в требуемой кодировке.

Ну вообще-то, этого сообщения не должно быть и кодировка должна переключаться в любом случае, как это сделано в других просмотрщиках и редакторах.
Quote:
Вы пытаетесь однобайтный ANSI перевести на двухбайтный UTF.

Мне следовало сразу это написать: плагин открыл обычный ini-файл как UTF-8 со всеми вытекающими квадратиками вместо русских символов. Я переключил его в ANSI - все сработало. Мне стало интересно, что могло привести к тому, что файл открылся как UTF-8, поэтому я снова попытался его переключить в UTF-8 и словил вышеуказанную ошибку. Окно плагина при этом стало пустым.

Еще заметил, что переключение в UTF-16 происходит гораздо медленнее, чем в Cuda и AkelPad. Но вы вроде собирались что-то исправить, может это поможет.
Back to top
View user's profile Send private message
olegvsk



Joined: 17 Dec 2020
Posts: 93

Post (Separately) Posted: Sun May 26, 2024 19:16    Post subject: Reply with quote

Orion9 wrote:
плагин открыл обычный ini-файл как UTF-8 со всеми вытекающими квадратиками вместо русских символов
По идее, должен был сразу показать ошибку. Не поделитесь файлом?

Orion9 wrote:
Ну вообще-то, этого сообщения не должно быть и кодировка должна переключаться в любом случае, как это сделано в других просмотрщиках и редакторах.
Это если в других редакторах свои таблицы перекодировки. Здесь используется MultiByteToWideChar от Windows, которая просто возвращает пустой текст. Впрочем, пока ничего не утверждаю, с кодировками тут ещё надо разбираться.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 300

Post (Separately) Posted: Mon May 27, 2024 00:28    Post subject: Reply with quote

Quote:
По идее, должен был сразу показать ошибку. Не поделитесь файлом?

Кажется, разобрался в чём проблема. Не совсем обычный это был ini-файл. В нём был редирект секций из wincmd.ini, связанных с историей панелей, командной строки и т.п. Не так давно я переименовывал ряд файлов, содержащих юникодные символы в именах, и в секции [RenameSearchFind] осталась история замены символов. ТС их хранит примерно в таком виде "п»їв§ё", т.е. в данном случае это "знак солидуса" ))
https://symbl.cc/ru/29F8/
Если эти символы убрать из истории (а уменя их всего было два), то файл определяется нормально как ANSI. По идее, конечно, не должно быть такой реакции на пару символов и, разумеется, должно быть обратное переключение кодировки "туда-сюда" в случае неудачного срабатывания.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 300

Post (Separately) Posted: Mon May 27, 2024 20:50    Post subject: Reply with quote

При первом ознакомлении с json-файлами становится понятно, чего не хватает плагину и почему процесс редактирования главной темы выглядит таким сложным, путаным и бесперспективным занятием. Отсутствие промежуточного звена в виде прямого редактирования синтаксисов усложняет настройку хайлайтеров в контексте той или иной темы. Изменение главной темы хорошо сказывается лишь на некоторых хайлайтерах, но хуже смотрится на других, а третьим - вообще не подходит.

Более того, в контексте определенного хайлайтера многие параметры основной темы становятся просто избыточными и декоративными, поскольку не имеют никакого отношения к этому хайлайтеру. Самый яркий пример - обычный ini-файл, файл синтаксиса которого содержит всего 5 правил подсветки (SubRules 4, KeyList 1). Но чтобы изменить эти правила, нужно открыть всю тему и при этом увидеть кучу нерелевантных и сбивающих с толку параметров, типа AssemblerComment, AssemblerReservedWord, CharacterForeground, DirectiveForeground и т.д.

Поскольку в окне редактирования темы не предусмотрен фильтр по правилам конкретного синтаксиса, процесс создания отдельной темы для него не представляется такой уж лёгкой и простой задачей. Сейчас все это выглядит довольно неудобно и ненаглядно. Вероятно, здесь нужна отдельная прослойка в виде редактора темы в контексте определенного хайлайтера на основе выбранной (эталонной) темы. Все-равно одна (эталонная) тема не может подойти всем хайлайтерам, а следовательно их так и так придется создавать кастомно, чтобы полностью удовлетворить все потребности.
Back to top
View user's profile Send private message
olegvsk



Joined: 17 Dec 2020
Posts: 93

Post (Separately) Posted: Tue May 28, 2024 03:07    Post subject: Reply with quote

Orion9 wrote:
Отсутствие промежуточного звена в виде прямого редактирования синтаксисов усложняет настройку хайлайтеров
Была идея сделать и редактор синтаксисов, но уж больно объёмная задача. Всё же речь о простом вьюере.

Orion9 wrote:
нужна отдельная прослойка в виде редактора темы в контексте определенного хайлайтера
Нет. Либо темы универсальны, либо каждую привязываем к синтаксису и настраиваем их вместе, это два разных подхода. Если их смешивать, только прибавится путаницы.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 300

Post (Separately) Posted: Tue May 28, 2024 17:40    Post subject: Reply with quote

olegvsk wrote:
только прибавится путаницы.

Путаница и так уже есть. Одну тему на все синтаксисы натянуть не получается, как выяснилось. При этом явным образом нигде не указывается, что нужно создавать дополнительные темы, чтобы добиться желаемого результата. Хуже всего, нет никаких удобств для быстрого и эффективного создания таких тем, как и нет никакой документации по json-файлам. И вообще, в плагине нет никакой справки, даже простого readme файла, что выглядит довольно странно и ясности ему точно не добавляет. Словно тут и так всё ясно и понятно - только бери и пользуйся. Но на деле оказывается далеко не так.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 221

Post (Separately) Posted: Wed May 29, 2024 13:19    Post subject: Reply with quote

А почему для случая, если что-то не найдено в поиске - не выскакивает окошко с сообщением, что ничего не найдено? Неужели лучшим и оптимизированным решением является то, что сейчас сделано - вывод в статус-бар инфы, что "буббу": не найдено?
Back to top
View user's profile Send private message
olegvsk



Joined: 17 Dec 2020
Posts: 93

Post (Separately) Posted: Wed May 29, 2024 13:56    Post subject: Reply with quote

Destiny wrote:
не выскакивает окошко с сообщением, что ничего не найдено

Меня, например, такие окошки раздражают, поскольку требуют реакции. Есть "дзынь", есть информации в строке состояния, курсор остаётся на месте.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
Page 6 of 10

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group