2012-02-14

Snaked и GTK NumPad

Я уже жаловался на то что в GTK'шных приложениях хреново работает NumPad (в режиме курсора), это касалось навигации и выделения с использованием регистровых Ctrl и Shift, а так же использования буфера обмена, т.е. комбинации Ctrl+Insert, Shift+Insert и Shift+Delete не работали. Это препятствовало полноценному использованию GTK'шных приложения где требуется маломальская работа с текстом. В чём конкретно проблема не знаю, у Qt-приложений всё нормально, у GTK'шного Geany всё тоже отлично работает, видимо тут грешить надо на виджет GtkTextView и на то что он работает с Insert и Delete, но забивает на KP_Insert и KP_Delete.

Но проблема как-то решилась со временем, правда я уже напрочь отучился использовать приложения заточенные на GtkTextView (GtkSourceView основан на этом же виджете и наследует косяк), т.е. всякие редакторы, в IM это как бы не сильно беспокоит, например.

Ну вот и до Snaked дошла очередь :-). Редактор всем хорош, вот только построен он на паршивом (это моё официальное мнение) GtkSourceView, а значит использует все косяки этого виджета и не даёт мне работать с хоткеями как я этого хочу. Ещё недостаток, это заметное притормаживание, даже очень заметное после Geany. Тормозами я не занимался пока, а вот описанная ситуация с NumPad'ом решается таким плагином:
import gtk


author = 'bw<bw@handsdriver.net>'
name = 'M$ Keypad Copy/Paste'
desc = '<ctrl>KP_Insert + <shift>KP_Insert + <shift>KP_Delete'


def init(injector):
injector.bind('editor-active', 'copy', None, copy).to('<ctrl>KP_Insert')
injector.bind('editor-active', 'cut', None, cut).to('<shift>KP_Delete')
injector.bind('editor-active', 'paste', None, paste).to('<shift>KP_Insert')


def copy(editor):
clipboard = editor.view.get_clipboard(gtk.gdk.SELECTION_CLIPBOARD)
editor.buffer.copy_clipboard(clipboard)


def cut(editor):
clipboard = editor.view.get_clipboard(gtk.gdk.SELECTION_CLIPBOARD)
editor.buffer.cut_clipboard(clipboard, True)


def paste(editor):
clipboard = editor.view.get_clipboard(gtk.gdk.SELECTION_CLIPBOARD)
editor.buffer.paste_clipboard(clipboard, None, True)
Собственно чем приглянулся Snaked. Тем что написан на родном для меня языке Python. Плагинизация, хотя тут ничем меня удивить не получилось. Маленькой, но наиважнейшей для меня фичей, это поддерживание сессиий: может быть запущено несколько экземпляров редактора с разными сессиями и при открытии очередного файла, ключиком можно указать в каком экземпляре он будет открыт (если грубо) и т.п. Запоминает файлы в сессии и не удаляет их оттуда пока ты сам это не сделаешь, а вот Geany сбрасывает, когда открываешь для редактирования файл при том что редактор не был загружен до этого. Да и просто интересными внутренностями, есть чему поучиться, а то и позаимствовать ;-).

Комментариев нет: