Собираем
информацию
по крупицам

RSS подписка

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

Статьи - Компьютерное

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

 



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

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



Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (стр. 1)

База Rarrugas (стр. 1)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean (стр. 1)

База Аrmagedec

База SorokinRed

База Deadelf79

База Adgaver (стр. 1)

База Pipitos1983

База Silenn (стр. 1)

База Shlyapnikova - херомантия и ригидность

База Velonski (стр. 1)

База BrokeRU (стр. 1)

База Mcold (стр. 1)

База Alensav (стр. 1)

База Alensav2 (стр. 1)

База Consp11 (стр. 1)

База Kozlov-AE (стр. 1)

База Wwwlir (стр. 1)

База Duwaz (стр. 1)

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База RuDennn (Bunny-Hop)

База Manakaden

База Vitvrn

База Fanrok

База Grimar

База_Juryak

База Nicolasomsk

База Azatserikbaev

База Shut913

 

Подробности на странице MyTetra Share.

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