Как я это вижу.
Програмка висит в памяти.
При выделении средней кнопкой мыши текста и последующим нажатием хоткея конвертирует содержимое буфера из одной раскладки в другую, затем вставляет вместо выделенного.
Как дополнительная функция — исправление последствий нажатия caps_lock/shift+caps_lock
Хотел попробовать написать сам в рамках знакомства с python, но нигде не нашёл информации по работе с мышиным буфером. Вообще единственный известный мне аналог со столь удобно реализованным ручным исправлением раскладки — это ныне покойный Arum Switcher для win32 (не работающая с GTK-приложениями к тому же). Во всех прочих, включая PuntoSwither, это реализовано неудобно. Xneur тоже никуда не годится со своей автоматикой.
Если кто решит сам такое написать, да ещё и прикрутить простенькую морду (по мне так лишняя, но многим может пригодиться), возможность прятаться в трей разных DE/WM — окажу посильную помощь, скажем с иконкой или с дизом морды (что выносить и т.д.).
Предожение сделать удобную программу или скриптик (или хотя бы подсказать как работь с мышиным буфером)
Модератор: Модераторы разделов
-
AlexYeCu
- Сообщения: 1137
- ОС: fedora
-
sirocco
- Сообщения: 782
- Статус: Задвинутый соучастник
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: Предожение сделать удобную программу или скриптик
С мышинным буфером можно работать посредством вызова инструмента xsel.
-
BlackStar
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: Предожение сделать удобную программу или скриптик
Вот отрывок из моего проекта (SLog) реагирующий на выделения слова:
Код:
# -*- mode: python; coding: utf-7; -*-
import gtk, gtk.gdk as gdk
import gobject
import re
class Spy:
def __init__(self):
self.timer = 0;
self.prev_selection = ""
self.clipboard = gtk.clipboard_get(gdk.SELECTION_PRIMARY)
self.spy_view = None
def __on_clipboard_text_received(self, clipboard, text, data):
""" Обработчик события появления текста в буффере обмена."""
if text is None:
return
selection = text.lower().strip()
if selection == "" or selection == self.prev_selection:
return
self.prev_selection = selection
word = selection
....
def __on_timer_timeout(self):
if self.timer == 0:
return False
display = gdk.display_get_default()
screen, x, y, mask = display.get_pointer()
mask = mask & ((1<<13)-1)
# Учёт клавиши модификатора
if mask & self.conf.get_mod_key():
if self.spy_view.get_property("visible") is False:
self.clipboard.request_text(self.__on_clipboard_text_received)
else:
if self.spy_view.get_property("visible"):
self.spy_view.hide()
return True
def start(self):
self.spy_view = SpyView()
self.clipboard.set_text("")
self.prev_selection = ""
self.timer = gobject.timeout_add(300, self.__on_timer_timeout)
def stop(self):
self.timer = 0
self.spy_view.destroy()
class SpyView(gtk.Window):
....
LightLang Team
-
AlexYeCu
- Сообщения: 1137
- ОС: fedora
Re: Предожение сделать удобную программу или скриптик
sirocco когда я его видел, был жутко неудобен
rm_, BlackStar — спасибо, посмотрю
rm_, BlackStar — спасибо, посмотрю