Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Klipper - zastosowania praktyczne

Uwaga: Jeżeli nie korzystasz z Klippera, to go uruchom.
Uwaga2: Jeżeli nie możesz uruchomić Klippera, to go zainstaluj

Ponieważ komputery ciągle powielają informacje, a można nawet powiedzieć, że na tym opierają swoje działanie, a w dodatku większość czynności wykonywanych czynności dałoby się opisać słownie, przez co interfejsy tekstowe nie odeszły w niepamięć, postanowiłem polepszyć jakość swojej pracy przez wywoływanie poleceń na znalezionym w tekście. Oznacza to, że znajduję w materiałach szkoleniowych odnośnik do strony lub polecenia do wykonania, a ja chcę zrealizować zadaną mi pracę możliwie najszybciej.

Z tym problemem do tej pory poradzono sobie w następujący sposób. Niezależnie czy w dokumencie znajduje się informacja o tym, że dany tekst jest odnośnikiem czy nie, to nasze aplikacje pozwalają nam np. otworzyć odnośnik kliknięciem - poprzez rozpoznanie danej frazy. Jest to niekiedy kłopotliwe, bo np. chcielibyśmy skopiować tekst lub go przenieść, a nie otwierać stronę - zrobienie czegoś myszką wydaje się być trudne. W dodatku, to nie możemy wykorzystać menu kontekstowego dostarczonego wraz z aplikacją.

Jak możemy rozwiązać ten problem?
Przedewszystkim chcelibyśmy stworzyć mechanizm, który nie będzie nam się narzucać, od razu wybierając domyślną akcję lub się uaktywniając niespodziewanie. Po drugie chcielibyśmy, by ten mechanizm nie wymagał specjalnej wiedzy od autorów aplikacji, bo chcielibyśmy go wykorzystać w każdym programie. Po trzecie: chcielibyśmy, by dało się go rozszerzać nie ingerując w programy.

Pierwsze, co przychodzi na myśli, to oczywiście - konieczność zaznaczenia(wybrania jakimś sposobem) elementu, który nas interesuje. W X11 zaznaczenie tekstu powoduje jego automatyczne skopiowanie do schowka X11. Jest to bardzo wygodne rozwiązanie. Jednak dla naszych zastosowań nie wystarcza, gdyż chcielibyśmy nie pamiętać programów za pomocą którego możemy np. uruchomić stronę internetową, jak również nie chcemy jeździć kursorem po całym ekranie, by wkleić zaznaczony tekst do jakiegoś pola tekstowego(przyjmijmy, że z naszego komputera korzysta babcia, i to dla niej tworzymy rozwiązanie).

W środowisku KDE istnieje program do zarządzania zawartością schowka tekstowego - nazywa się Klipper. Posiada on historię zaznaczonego tekstu, a także możliwość dodania działań na zaznaczonym elemencie. Posiada szereg opcji, jak np. automatyczne wywoływanie działań na zaznaczonym elemencie(kiedy istnieje wiele działań, to wyświetli menu wyboru pod kursorem).

Na wyświetlaniu menu nam właśnie zależy. Z podanych wcześniej powodów zrezygnujemy z wyświetlania menu automatycznie po zaznaczeniu elementu. Zamiast tego będziemy wywoływać menu ręcznie przez gest myszką i skrót na klawiaturze.

Najpierw zdefiniujmy kilka działań. Zależy nam na:
- Wyszukiwaniu zaznaczonego tekstu
- Przejścia na stronę internetową, gdy zaznaczony tekst jest odnośnikiem
- Uruchomienia polecenia w powłoce
- Uruchomienia polecenia w powłoce, wklejając standardowe wyjście do schowka
- Uruchomienia polecenia w emulatorze terminala
- Przetłumaczenia zaznaczonego słowa

Teraz musimy jakoś pogrupować teksty, które będziemy używać ze względu na ich budowę.
Chodzi nam o wyszukiwanie w Google dowolnego tekstu
Chodzi nam o przejście na wskazaną stronę internetową przez odnośnik
Chodzi nam o uruchomienie polecenia w powłoce dla dowolnego tekstu
Chodzi nam o uruchomienie polecenia w powłoce dla dowolnego tekstu, wklejając wyjście do schowka
Chodzi nam o uruchomienie polecenia w powłoce dla dowolnego tekstu w emulatorze terminala
Chodzi nam o przetłumaczenie dowolnego słowa dla dowolnego tekstu

Części pogrubione pozwalają nam stworzyć grupy dla naszych poleceń:
- Dowolny tekst
- Odnośnik

Teraz warto wspomnieć czym są wyrażenia regularne. Wyrażenia regularne są ciągiem znaków określającym, pod jakim kątem sprawdzamy(porównujemy) inny ciąg znaków. Niektóre implementacje pozwalają nawet używać wyrażeń regularnych z podstawieniami do wykonywania bardziej złożonych operacji - tzn. zastępowania jakiegoś tekstu innym, lecz złożonym z wyrzucanego tekstu. Tutaj zajmiemy się jedynie normalnymi wyrażeniami regularnym(do dopasowywania tekstu do wzorca).

Dla każdej grupy musimy zdefiniować wyrażenie regularne, by komputer wiedział, że wskazany teksty jest odnośnikiem.Dla pierwszej grupy.*Dla drugiej grupy^\s*((http://|www\.)|.*\.(com|org|pl)(.[^.^/]+)?/?)

Drugie wyrażenie regularne jest troszeczkę bardziej skomplikowane. Najpierw zajmiemy się pierwszym. Kropka oznacza dowolny znak, a gwiazdka dowolną ilość lub zero powtórzeń. Tak więc(można to poprawić) w sytuacjach, gdy nie mamy zaznaczenia, to klipper pozwoli nam po prostu przejść na Google lub translator. Można to zmodyfikować zstępując gwiazdę znakiem plusa(+). Pierwsze wyrażenie służy do rozpoznawania dowolnego tekstu(dla wyjaśnienia: skoro wyszukujemy dowolny tekst lub tekst pusty, to możesz zarówno nić nie wstawiać do wzorca - efekt będzie taki sam; użyłem tylko tego wyrażenia, by czytelnik się zapoznał z wyrażeniami regularnymi). W drugim przypadku użyliśmy ^ jako symbolu rozpoczęcia zaznaczenia(więc wyszukiwanie będzie przebiegać od początku), \s oznaczającego znak pusty(np. spację). Nawiasy pozwalają nam stosować *? dla ciągów, \. oznacza kropkę w dopasowywanym tekście. Należy przyjrzeć się jeszcze symbolowi | . Oznacza on alternatywę. Dla przykładu ^(http://|www\.) oznacza, że odnośnik zaczyna się od http:// lub www. Ponieważ zaraz po nawiasie pojawia się .*, to po www lub http:// może występować dowolne wyrażenie, łącznie z www. Ponieważ nie wszystkie odnośniki zaczynają się na www lub są zapisane w notacji z http:// , to dodatkowo stosujemy alternatywę dla zakończenia. Odnośnik może się kończyć na nazwę domeny com, org, net(nie obsługiwane) + opcjonalnie "naddomena" narodowa.

Od tej pory grupę będziemy nazywać działaniem.
Po omówieniu wyrażeń regularnych pora przejść do rzeczy łatwych. Na początku dla środowiska KDE w ustawieniach systemowych(ALT+F2 i wpisać ustawienia systemowe) wybieramy Skróty i Gest. Następnie zdefiniujemy globalne skróty klawiszowe. Wybieramy z menu Klippera i przypisujemy mu skrót dla ręcznie wywołaj działanie na zawartości schowka.
Ponieważ nie lubię pamiętać skrótów klawiszowych, to warto dla klippera zdefiniować globalny gest myszy. Jak tego dokonać opisywałem w jednym z poprzednich wpisów. Musimy zdefiniować wywołanie polecenia DBus, a w zakładce działanie wypełnić pola następująco:
Zdalny program - org.kde.klipper
Zdalny obiekt - /klipper
Funkcja - org.kde.klipper.klipper.showKlipperManuallyInvokeActionMenu

Ja sobie zdefiniowałem piękną literkę C(ang. Copy) dla wywołania tego menu.
Teraz zajmiemy się samymi działaniami Klippera.

Przyjmujemy, że Klippera masz uruchomionego. W takim razie na tacce systemowej powinieneś mieć ikonkę nożyczek. Jeżeli jej nie widzisz, to może jest ukryta(kliknij na strzałkę). Lewym kliknięciem na nożyczki wywołamy menu, z którego wybieramy Konfiguracja Klippera ....

Teraz należy dodać nasze działania. Przejdź więc do zakładki działania, a dla każdego działania wybierz wybierz dodaj działanie.
Przykład dodania działania:
Wyrażenie regularne - .*
Opis - Odnośnik

Należy teraz każdemu działaniu przypisać przyporządkowaną mu akcję. Przypomnę:
Chodzi nam o wyszukiwanie w Google dowolnego tesktu
Chodzi nam o przejście na wskazaną stronę internetową przez odnośnik
Chodzi nam o uruchomienie polecenia w powłoce dla dowolnego tekstu
Chodzi nam o uruchomienie polecenia w powłoce dla dowolnego tekstu, wklejając wyjście do schowka
Chodzi nam o uruchomienie polecenia w powłoce dla dowolnego tekstu w emulatorze terminala
Chodzi nam o przetłumaczenie dowolnego słowa dla dowolnego tesktu

Przykład uruchomienia przeglądarki internetowej z wynikami wyszukiwania dla Google:
xdg-brower http://www.google.com/search?q="%s"
llub
firefox -url http://www.google.com/search?q="%s"
Te działanie musimy przyporządkować dla dowlnego tekstu

Przykład uruchomienia polecenia w powłoce:
/bin/bash -c "%s"

Podane tutaj przykłady należy wpisać w atrybucie pod kolumną polecenie. Dla wklejania wyjścia do schowka wystarczy przyjrzeć się kolumnie wyjście(ja wybrałem: zastąp zawartość schowka).

Dla uruchomienia polecenia w emulatorze terminala wystarczy zastąpić /bin/bash przez /usr/bin/X11/xterm .
Jeżeli użytkownik chce korzystać z tłumaczeń, to już zostawiam to na jego głowie. Nie będę decydować, z jakiego tłumacza będzie korzystać.

Zastosowań jest wiele, np. dodawanie spotkania do terminarza(poprzez zaznaczenie daty lub godziny, ustawienie stopera na odmierzenie czasu, wysyłanie maila czy dodawanie maila do książki adresowej, itd.).

Całość konfiguracji zajmuje chwilkę. Najtrudniej będzie się pewnie przebić przez mój wpis. 

Komentarze

0 nowych
nintyfan   11 #1 11.12.2010 15:15

Dla pewnych przypadków konieczne może być stworzenie możliwości podziału tekstu (nie możemy zaznaczyć części). W tym celu warto się posłużyć

echo "%s" | kwrite --stdin

borzole   4 #2 13.12.2010 17:51

...hymmm, zajefajny pomysł
zaznaczam, wywołuje, filtruje, wybieram akcje

Może ktoś zna odpowiedź, jak w PyGTK zwrócić zaznaczony tekst? Obecnie mogę zwrócić tylko taki skopiowany do schowka.

#!/usr/bin/python
import pygtk
import gtk
cp = gtk.clipboard_get()
if cp.wait_is_text_available(): print cp.wait_for_text()

Jakbym to wiedział, to bym mógł sobie zaimplementować pomysł nintyfan po swojemu.

  #3 13.12.2010 18:04

http://library.gnome.org/devel/pygtk/stable/class-gtkclipboard.html

Na podstawie wskazanej dokumentacji podajesz jako parametr nazwany selection wartość łancucha znaków "PRIMARY", czyli linijkę cp = gtk.clipboard_get() zamieniasz na cp = gtk.clipboard_get(selection="PRIMARY") .

nintyfan   11 #4 13.12.2010 18:12

Dodałem informację pod innym pseudominem, i nie powinnem robić śmietnika.
Podaję ją jednak jeszcze raz:
http://library.gnome.org/devel/pygtk/stable/class-gtkclipboard.html

Czyli w wywołania gtk.clipboard_get umieszczasz select="PRIMARY" .

borzole   4 #5 13.12.2010 18:23

Dzięki, chyba muszę sobie kupić okulary, bo za pierwszym czytaniem dokumentacji nie widziałem tego :)
W wolnej chwili się pobawię.

BenderBendingRodriguez   6 #6 13.12.2010 21:22

Hmmm, może skusi mnie to do używania klippera a nie chowania go jako irytującego dodatku ;)

Jaahquubel_   13 #7 14.12.2010 10:11

Fajna sprawa, fajny pomysł. Ale wpis mało czytelny. Najpierw jasny wstęp, potem machanie rękoma. Może jakbyś jakiś stosowny zrzut ekranu zapodał, to by było jasne. Bo ja nie wiem co gdzie trzeba wpisać. Zainstaluję klippera, odpalę, zobaczę, będę wiedział. Ale gdyby były zrzuty, wiedziałbym już.

  #8 14.12.2010 15:48

@Jaahquubel_ | 14.12.2010 10:11 :
Mam nie miłe doświaczenia ze stawianiem zrzutów na tym blogu.

Jaahquubel_   13 #9 14.12.2010 18:24

"Mam nie miłe doświaczenia ze stawianiem zrzutów na tym blogu."
A możesz rozwinąć ten temat?