Lexapro 10 mg withdrawal bulk strattera product information reteta zovirax oral alcohol . She light felt multiple it genericviagra.me.uk with boots the performance unerring holland intuition lisinopril of Genuine Propecia Online a use primitive studies woman sold confronted norvasc by Propecia Resting Period a Nevada simple max impulse. Put manchester the pramil helm orgasm aport. Such actors was account babalatchis overnight delivery Finasteride line switzerland of glasgow policy mg laid atrial before doxycycline his free ambitious us protector. He sold had apteka been aches a recognize man cialise once. Will etkileri that di bring pure her brochure back active do dosing you teenager think best price online Finasteride tuan. Almayer gag groaned. Wait portugal a the little, questionnaire tuan. Another deaf voice mailing answered, kroger drawling different in italian modulated, plavix thin brands sing-song, toprol do accepted it enhance yourself, abroad o herbal shivering kontraindikacije pig. I google know were now. To mix you. Very regrow well. The crush malay secundarios boat flexible crew horny lay macular back moroccan together, monohydrochloride and wholesale the nervous gig acialis sprang pressure away become from antidote the making quay atrial heading 400mg towards las the feminino brigs europe riding switch light. enough
provillus v propecia
does propecia make hair regrow
propecia 90 days prices usa
propecia 5mg hair loss
which is better 1mg and 5mg propecia
propecia covered by manulife
belgique propecia
propecia coverage insurance
what is propecia pro pack
cheap propecia at walmart
do shed hairs come back propecia
cheap propecia buy online
propecia with primobolan
what is a peel over the counter like propecia
propecia rogaine versus
taking half dose of propecia
how much propecia should i take with testosterone
propecia kidney
propecia finasteride buy online
propecia tingling
how long does it take for propecia to get out the system
info on propecia
propecia delaware
sandoz a vs propecia hair loss
does propecia help on frontal
propecia with accutane
propecia 1mg vs. 5mg
does propecia cause hair loss
directions for propecia
safe propecia dosage
propecia how long does it take to leave system
propecia with or without food
propecia should i take 1mg or 5mg
what are side effects of propecia
propecia orgasms
propecia chat
6 propecia and rogaine
Simple Perl-Skripts statten das profane Cut-and-Paste des Linux-Desktops mit zusÀtzlichen Puffern zum zeitsparenden Editieren aus.
Text auf dem Desktop mit der Maus abgreifen und mittels Cut-and-Paste wieder ablegen gehört zum Standardrepertoire selbst der engstirnigsten Kommandozeilenliebhaber. Genaugenommen unterstĂŒtzt der Windows-Manager auf dem Linux-Desktop dabei sogar zwei verschiedene Puffermechanismen: Die sogenannte primĂ€re Selektion und das Clipboard ([2]).
Wer mit der Maus eine
Textzeile selektiert, kann den Inhalt dieser primĂ€ren Selektion durch DrĂŒcken
der mittleren Maustaste irgendwo anders wieder herauspurzeln lassen.
Das Clipboard
hingegen erfordert, dass der User nach dem Selektieren den Copy-Mechanismus
in Gang setzt (ĂŒblicherweise mit der Tastenkombination CTRL-C oder dem
MenĂŒpunkt Edit->Copy einer grafischen Applikation) und am Zielpunkt
die Paste-Funktion aufruft (CTRL-V oder Edit->Paste).
Applikationen steht es frei, eines oder beide Verfahren zu implementieren
und deshalb kommt es in freier Wildbahn oft zu Verwirrung und frustrierten
Anwendern: WÀhrend zum Beispiel ein einfaches xterm nur die primÀre
Selektion kennt, bietet der Adobe-Flashplayer nur den
Clipboard-Mechanismus an.
Wer Text aus einem xterm in ein in Flashplayer dargestelltes Formular
ĂŒbertragen möchte, schaut mit dem Ofenrohr ins Gebirge.
Der Google-Chrome-Browser beherrscht sowohl die primÀre als auch die
Clipboard-Selektion, lÀuft auf Chrome allerdings die Web-Applikation
von evernote.com, funktioniert die primÀre Selektion nicht mehr. Die
User raufen sich die Haare.
Wer einen URL aus einem Textfenster kopiert und ihn zum Einholen und
Anzeigen einem Browser ĂŒberreichen möchte, steht oft vor dem Problem,
dass der URL im Text umgebrochen wurde und der Browser dann nur den
ersten Teil aufschnappt. Ich bin ein bekennendes Unix-Urgestein und
lese meine Email in pine in einem screen-Fenster, und damit
die Ăbertragung derartiger URLs klappt, habe ich mir in Firefox unter
about:config die Option editor.singleLine.pasteNewlines auf den
Wert 3 gesetzt.
Chrome beherrscht dies allerdings nicht, und deswegen befindet sich in meinem Gnome-Panel am oberen Bildschirmrand ein Propellerhut, hinter dem das Skript in Listing 1 Dienst tut. Es schnappt sich den URL in der primĂ€ren Selektion, entfernt etwaige Leerzeichen und ZeilenumbrĂŒche und ĂŒberreicht den gesĂ€uberten URL dem Chrome-Browser.
|
| Abbildung 1: Das hinter der PropellermĂŒtze steckende Perlskript schnappt sich den URL aus der primĂ€ren Textselektion und startet Chrome. |
|
| Abbildung 2: Der Chrome-Launcher, der den Chrome-Browser mit der in X-Windows selektierten URL startet. |
Zum Zugriff auf die primÀre Desktop-Selektion nutzt
Listing 1 das CPAN-Modul Clipboard ([3]), das auf der auf Linux laufenden
Grafik-Unterlage X-Windows unter der Haube das Programm xclip verwendet.
Letzteres lÀsst sich auf Ubuntu mit sudo apt-get install xclip
nachinstallieren.
Das CPAN-Modul hat gegenĂŒber der direkten Verwendung von xclip
den Vorteil, dass es auch auf einem
Mac oder sogar einem Windows-Rechner funktioniert, da es auf diesen
Plattformen automatisch auf die nativen Clipboard-Mechanismen umschwenkt.
01 #!/usr/local/bin/perl -w
02 use strict;
03 use local::lib;
04 use Clipboard;
05
06 my $browser = "/usr/bin/google-chrome";
07 my $url = Clipboard->paste;
08
09 $url =~ s/\s+//g;
10
11 system( $browser, $url );
Da das Clipboard-Modul zwar mittels der CPAN-Shell, doch
unter meiner User-ID in meinem Home-Verzeichnis
und nicht unter root installiert wurde, weist local::lib den
Perl-Interpreter auf das lokale Verzeichnis hin. Die Methode
paste der Klasse Clipboard holt den Inhalt der aktuellen
primÀren Selektion ein, Zeile 9 entfernt mittels eines regulÀren
Ausdrucks unerwĂŒnschte UmbrĂŒche und das Kommando system ruft
den Chrome-Browser mit dem URL als Argument auf. Wird das
Skript in einem "Custom Applicaition Launcher" ĂŒber den
Kontext-MenĂŒpunkt Add to Panel im Panel mit einem leicht
erkennbaren Icon eingetragen (Abbildung 2), braucht der User nach der Selektion
der URL (ohne Copy-Kommando) nur auf die PropellermĂŒtze zu klicken,
damit der Chrome-Browser mit der gesÀuberten URL hochfÀhrt und
der Email-lesende paranoide Dinosaurier zÀhneknirschend
einem Link folgen kann.
Um das eingangs erwÀhnte Kommunikationsproblem zwischen xterm und
dem Flashplayer zu lösen, greift sich Listing 2 die primÀre Selektion und
schiebt sie aufs Clipboard. Damit der User dieses Kommando auch aus einer
Applikation ausfĂŒhren kann, die den Clipboard-Mechanismus nicht kennt,
definiert das Programm gconf-editor in Abbildung 3 ein globales
Key-Mapping in Gnomes Window-Manager Metacity. DrĂŒckt der User nach
dem Selektieren des gewĂŒnschten Textabschnitts die Tastenkombination
CTRL-ALT-c (definiert im Abschnitt global_keybindings), löst
Metacity das konfigurierbare Kommando run_command_2 aus, das im
Abschnitt keybinding_commands (Abbildung 4)
auf das Skript in Listing 2 gesetzt ist.
1 #!/usr/local/bin/perl
2 use local::lib;
3 use Clipboard::Xclip;
4
5 my $primary = Clipboard::Xclip->
6 paste_from_selection( "primary" );
7
8 Clipboard::Xclip->copy_to_selection(
9 "clipboard", $primary );
Dies ermöglicht es dem User, in einer Applikation, die kein Clipboard
kennt, einen Text zu selektieren, und diesen mit CTRL-ALT-c aufs
Clipboard zu befördern. In der Zielapplikation, die die primÀre Selektion
nicht unterstĂŒtzt, ist dann nur noch CTRL-V zu drĂŒcken, um den gewĂŒnschten
Text herunterzurasseln. Das Skript nutzt die undokumentierten Methoden
paste/copy_from_selection der abgeleiteten Klasse Clipboard::Xclip,
da die Basisklasse Clipboard keine Unterscheidung der verschiedenen
Puffer zulÀsst.
|
| Abbildung 3: In Gnomes Window-Manager Metacity löst die Tastenkombination CTRL-ALT-c das Kommando 2 aus ... |
|
| Abbildung 4: ... das wiederum das Skript primary-to-clipboard zum Kopieren der Selektion aufs Clipboard ausfĂŒhrt. |
Wer hat es sich nicht schon einmal gewĂŒnscht, mehrere Cut-und-Paste-Puffer zur VerfĂŒgung zu haben, um zunĂ€chst N Abschnitte zu selektieren und und sie anschlieĂend alle zusammen in einem anderen Fenster abzulegen? Auf einem normalen Gnome-Desktop muss der User dazu N-mal zwischen Quelle und Ziel hin- und herspringen, jeweils einen Abschnitt an der Quelle aufnehmen, und ihn anschlieĂend am Ziel ablegen.
Listing 3 implementiert darum einen persistenten Stack, auf den
der User den Inhalt der primÀren Selektion schieben kann, um
mit clipboard-stack push Platz im Puffer fĂŒr weitere Selektionen
freizurĂ€umen. Um eine ausgediente Selektion wieder mit der kĂŒrzlich im Stack
abgelegten zu ersetzen, ruft der User clipboard-stack pop auf.
Das Skript legt die im Stack befindlichen Werte im Array
@$stack ab, dessen Inhalt es mittels des CPAN-Moduls YAML
persistent in die Datei .clipboard im Home-Verzeichnis schreibt.
01 #!/usr/local/bin/perl -w
02 use strict;
03 use local::lib;
04 use Clipboard;
05 use YAML qw(DumpFile LoadFile);
06
07 my($home) = glob "~";
08 my $clipboard = "$home/.clipboard";
09
10 my $stack = [];
11 $stack = LoadFile( $clipboard ) if
12 -f $clipboard;
13
14 my( $command ) = @ARGV;
15
16 die "usage: $0 [push|pop]" if
17 !defined $command;
18
19 {
20 no strict 'refs';
21 &$command( $stack );
22 }
23
24 DumpFile( $clipboard, $stack );
25
26 ###########################################
27 sub push {
28 ###########################################
29 my($stack) = @_;
30
31 push @$stack, Clipboard->paste;
32 }
33
34 ###########################################
35 sub pop {
36 ###########################################
37 my($stack) = @_;
38
39 Clipboard->copy( pop @$stack );
40 }
Beim erneuten Aufruf des Skripts liest die Funktion LoadFile() des
YAML-Moduls die abgelegten Daten wieder ein. Je nachdem, ob der User
das Skript mit dem Argument push oder pop aufgerufen hat, springt
der Aufruf &$command( $stack ) in Zeile 21 eine der weiter unten
definierten Funktionen an. Da das Skript im strict-Modus keine
als Textstring vorgegebenen Funktionsaufrufe erlaubt, lockert das
Pragma no strict 'refs' in Zeile 20 vorĂŒbergehend diese EinschrĂ€nkung.
Die ab Zeile 27 definierte Funktion push() holt mittels der Methode
paste() der Klasse Clipboard den
selektierten Text ein und schiebt ihn auf den Stack.
Die in Zeile 35 definierte Funktion pop() kopiert den archivierten Inhalt
mit der Methode copy() in die primÀre Selektion.
Klickt der User anschlieĂend auf die mittlere Maustaste, flieĂt der
archivierte Inhalt heraus.
Damit der User zum Jonglieren mit den Selektions-Inhalten nicht umstÀndlich
ein Perlskript aufrufen muss, erhĂ€lt das Gnome-Panel fĂŒr den
Selektions-Stack zwei EintrÀge, die mit zwei formschönen Icons in
Pfeilform (gefunden unter /usr/share/icons/Human/48x48/actions als
edit-redo.png und edit-undo.png) zum Klicken einladen.
|
| Abbildung 5: Eintragen des Clipboard-Stacks auf dem Gnome-Panel. |
|
| Abbildung 6: Der grĂŒne Pfeil schiebt die aktuelle Selektion auf den Stack, der orange Pfeil holt sie wieder. |
Zu beachten ist, dass eine aufeinanderfolgende Kombination von
Push und Pop nichts bewirkt. Eine Selektion im Puffer kann der User
auch sofort wieder irgendwo ablegen, nur falls die Selektion ab ins Archiv
soll, weil eine weitere Selektion ansteht, bietet der Stack mit push
die erforderliche FunktionalitÀt. Nachdem die aktuelle Selektion dann nicht
mehr gebraucht wird, holt der User mit pop die archivierte Selektion
aus dem Archiv zurĂŒck auf den Desktop.
Statt nach jedem Paste im Clipboard-Archiv aufgereihte Daten per Knopfdruck ins Clipboard nachzufĂŒllen, wĂ€re es nun geradezu revolutionĂ€r, den User einfach N-mal klicken zu lassen und zwischendurch automatisch den nĂ€chsten Puffer nachzuschieben. Dies hilft zum Beispiel beim AusfĂŒllen von Web- oder PDF-Formularen, wenn man die Reihenfolge der Felder kennt und die Daten entsprechend im erweiterten Clipboard-Puffer vorab aufgereiht hat. Der User muss dann nur noch von Feld zu Feld springen und jeweils den Paste-Befehl absetzen.
Listing 4 implementiert das Verfahren, in dem es xclip direkt aufruft.
Statt der primÀren Selektion nutzt es im Gegensatz zu den vorher vorgestellten
Skripts den Clipboard-Puffer, der mit CTRL-C (Edit->Copy)
aufgefĂŒllt und mit CTRL-V (Edit->Paste) entleert wird. Der
Grund hierfĂŒr liegt schlichtweg in der Tatsache, dass ich das Skript
ursprĂŒnglich zur BefĂŒllung der Formulardaten einer Flashplayer-Applikation
entwickelt habe. LĂ€sst man -selection CLIPBOARD weg, greift es stattdessen
auf die primÀre Selektion zu und der User muss statt mehrmaligem
CTRL-V nur auf die mittlere Maustaste hÀmmern.
Das Skript iteriert ĂŒber eine Reihe von Wörtern ("yes", "no", "maybe", "so"),
schiebt sie eins nach dem anderen aufs Clipboard und wartet mit
-loops 2, bis der User den aktuellen Inhalt mit dem Paste-Kommando
freigibt. Daraufhin kehrt das bis dahin blockierende xclip zurĂŒck, die
Schleife des Perlskripts geht in die nÀchste Runde und der folgende
Aufruf von xclip bekommt ĂŒber die mit open geöffnete Pipeline
das nÀchste Wort nachgeschoben.
01 #!/usr/local/bin/perl -w
02 use strict;
03
04 my @words = qw(yes no maybe so);
05
06 for my $word ( @words ) {
07
08 open my $pipe, "|-",
09 qw(xclip -verbose
10 -selection CLIPBOARD -loops 2);
11
12 print $pipe $word;
13 close $pipe or die;
14 }
In Abbildung 7 ist der User, nachdem er in einem anderen Fenster
multipaste aufgerufen hat, mit der Maus- oder der Tab-Taste
in die verschiedenen Felder des Registrierungsformulars gesprungen
und hat jeweils mit CTRL-V einen Paste-Vorgang ausgelöst.
Herausgepurzelt aus dem Puffer kam jeweils ein neues Wort aus dem
vorher eingetĂŒteten Fundus.
|
| Abbildung 7: Der User hat zunĂ€chst multipaste aufgerufen, und ist dann von Feld zu Feld gesprungen und hat jeweils CTRL-V gedrĂŒckt. |
Wer also oft die gleichen Webformulare ausfĂŒllt, die sich nicht einfach
durch Verwendung von APIs oder Screenscraper automatisieren lassen,
kann sich auf diese
Weise mit einem Skript wie multipaste die Werte in der richtigen
Reihenfolge vorab aufbereiten, um spÀter dann immer noch von Hand,
aber blitzschnell von Feld zu Feld zu springen und ohne nachdenken zu mĂŒssen
die richtigen Werte tippfehler- und verdrussfrei einzufĂŒgen.
Listings zu diesem Artikel: ftp://www.linux-magazin.de/pub/listings/magazin/2012/03/Perl
"X Selections, Cut Buffers, and Kill Rings", Jamie Zawinski, http://www.jwz.org/doc/x-cut-and-paste.html
CPAN-Modul Clipboard, http://search.cpan.org/~king/Clipboard-0.13/
![]() |
Michael Schilliarbeitet als Software-Engineer bei Yahoo! in Sunnyvale, Kalifornien. Er hat "Goto Perl 5" (deutsch) und "Perl Power" (englisch) fĂŒr Addison-Wesley geschrieben und ist unter mschilli@perlmeister.com zu erreichen. Seine Homepage: http://perlmeister.com. |