Собираем
информацию
по крупицам
Статьи - Компьютерное

Linux: как перестать удивляться, и начать работать

Как я искал текстовый редактор под Linux. Настройка KWrite под себя
26-04-2014
21:37:01

Настройка автоматического выделения слов

 

Итак, редактор 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 в ближайшее время до неюзабельного состояния. И мы сможем пользоваться привычным инструментом долго и плодотворно.

 



К списку "Компьютерное"

Поделиться этой страницей


Статистика


RSS подписка

Подпишитесь на новости сайта по RSS


 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик