Настройка автоматического выделения слов
Итак, редактор KWrite меня до некоторой степени устроил. Однако у него оказалась одна неприятная особенность, которая мешала полноценно использовать его для обработки кода и текста.
Проблема была в том, что в этом редакторе некорректно определялись границы выделения слов при быстром выделении через Ctrl+Shifr+стрелки влево-вправо и двойном клике. А этим механизмом я активно пользуюсь.
Можно ли настроить символы, ограничивающие выделение слов в KWrite? Сведения по этому вопросу я поискал в гугле и яндексе, ничего не нашел, написал на ЛОРе и на ОпенНете, и получил нуливое количество ответов. Документация тоже не пролила свет на эту проблему. Оставалось только лезть в код и разбираться, как же устроено автоматическое выделение слов.
Тут любители свободного софта могут воскликнуть - вот в чем сила опенсорча! Залез в код и нашел что тебе нужно! Или исправил и поделился с другими! Нет, товарищи, это бич опенсорча. Вопроса, поднятого в данной статье, просто не должно возникать. А если возник - то такие вещи должны быть прописаны в документации. Не каждый может разобраться как выкачать исходники нужной версии, залезть в них, что-то исправить, перекомпилировать, посмотреть как это работает и сделать какие-то выводы.
Я кратко расскажу о том, как устроено автоматическое выделение в KWrite, и как его можно настроить под себя.
В коде KWrite (а если быть точным, в файле /part/syntax/katehighlight.cpp), жестко захардкожена строка символов, которые МОГУТ быть границами слов:
static const QString stdDeliminator = QString (" \t.():!+,-<=>%&*/;?[]^{|}~\\");
Здесь все символы обозначают сами себя, за исключением "\t" - табуляция и "\\" - обратный слеш "\". Помимо этих символов в коде есть проверки на одинарные и двойные кавычки, а так же на начало и конец строки, которые тоже считаются границами слов.
При запуске KWrite происходит анализ расширения файла, и в зависимости от расширения используется специальный настроечный XML-файл, расположенный в каталоге /usr/share/kde4/apps/katepart/syntax. Вот примеры файлов, используемых для разных расширений:
- *.sh;*.bash;*.ebuild;*.eclass;.bashrc;.bash_profile;.bash_login;.profile - bash.xml
- *.php;*.php3;*.wml;*.phtml;*.phtm;*.inc - html-php.xml
- *.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;*.moc - cpp.xml
- и т. д.
Для некоторых расширений существует несколько таких файлов. Например для файлов языка C++ существует еще и настроечный файл gcc.xml. Как выбирается конкрентный файл (или, может быть, настройки из них они объединяются) я разобраться не смог. В любом случае, интересующая нас настройка (из проверенным мною расширений) находится только в каком-нибудь одном файле.
Механизм получения списка символов, корые являются границами слов, состоит в следующем. В коде KWrite захардкожены все возможные граничные символы:
" \t.():!+,-<=>%&*/;?[]^{|}~\\"
А в настроечных файлах директории /usr/share/kde4/apps/katepart/syntax прописываются символы, которые нужно исключить из этого набора, или нужно добавить в данный набор.
Исключение и добавление символов производится через XML-элемент <keywords>:
<keywords
casesensitive="1"
weakDeliminator="^%#[]$._{}:-/"
additionalDeliminator="`"
/>
Атрибут weakDeliminator отвечает за исключение символов из стандартного набора (да, по названию об этом не скажешь). Атрибут additionalDeliminator добавляет символы к стандартному набору.
Например, для *.sh - файлов прописано, что из набора граничных символов надо исключить "^%#[]$._{}:-/". Здесь есть символ точки и прямой слеш. Эти символы очень часто встречаются в *.sh -файлах, и по факту являются границами слов, даже если находятся в кавычках (в параметрах команд). Для более удобного редактирования я удаляю эти символы из исключающего набора, и - о чудо! KWrite начинает останавливать выделение и на точке, и на прямом слеше, что мне и требовалось.
Пройдясь по другим файлам, я подправил под себя настройки и для других расширений.
Настройка цветов
Стандартные цветовые схемы разметки текста в KWrite меня не устроили. И я в несколько итераций настроил цвета под себя, это можно делать из интерфейса программы.
Если кому-то понравился скриншот в предыдущей части повествования, выкладываю цветовую схему здесь. Схема создана в KWrite v.4.11.5. При экспорте, на 45 % возникает какая-то ошибка, однако эта схема успешно подключается. Просто при импорте нужно нажать OK для пропуска ошибки.
Скачать: Цветовая схема NormalDark для KWrite
На этом рассказ о том, как я искал текстовый редактор под Linux закончен. Надеюсь, что очумелые ручки девелоперов не изуродуют Kate/KWrite в ближайшее время до неюзабельного состояния. И мы сможем пользоваться привычным инструментом долго и плодотворно.