Xclip: Copy&Paste mit Rxvt-Unicode, Vim, Elinks und der Konsole

Text kopieren von X nach Konsole ist manchmal keine ganz triviale Aufgabe. Umgekehrt leider auch nicht. Etwas einfacher macht es Xclip.

Im Regelfall lassen sich Texte mit der Maus markieren und mit einem Klick auf die mittlere Maustaste (bei nur zwei Maustasten beide simultan gedrückt halten) an einer anderen Stelle wieder einfügen (Primäre Auswahl). Ebenso funktioniert z.B. in Rxvt-Unicode die Tastenkombination Shift+Einfg. Ich stellte jedoch immer wieder fest, dass Text falsch formatiert in einer Konsolenanwendung gelandet ist.

Xclip ist da der ideale Helfer, wenn man in einer X-Anwendung, z.B. einem Browser, Text markiert und in der Zwischenablage (Clipboard) speichert und ihn dann in ein Konsolenprogramm mit STRG+v oder ALT+v einfügen möchte. Hier sind ein paar Ideen Xclip mit bekannter Software für die Konsole einzusetzen.

Xclip im Terminal und in Skripten

Z.B. Quellcode markieren und in der Datei clipboard ausgeben. Der Parameter -o gibt den Inhalt der primären Zwischenablage nach STDOUT aus.

xclip -o > clipboard

Xclip eignet sich auch hervorragend für Pipe-Konstruktionen. Hier wird z.B. die Ausgabe von dmesg | grep eth0 in die primäre Zwischenablage kopiert, die sich mit der mittleren Maustaste in jede X-Anwendung einfügen lässt.

dmesg | grep eth0 | xclip

Siehe auch man xclip.

Xclip und VIM

Glücklich darf man sich schätzen, wenn man nicht nur auf GRMLs ZSH-Konfiguration, sondern auch GRMLs .vimrc gestoßen ist. Der Tipp stammt ursprünglich aus dem Vim-Wiki.

:map <F7> :w !xclip<CR><CR>
:vmap <F7> "*y
:map <S-F7> :r!xclip -o<CR>

Wenn SHIFT-F7 im Terminal der Wahl nicht funktioniert und „*y den Text ebenfalls nicht wie vorgesehen in den Buffer von Vim kopiert, kann man noch eine andere Variante aus den Kommentaren zum Tipp benutzen.

vmap <F6> :!xclip -f -sel clip
map <F7> mz:-1r !xclip -o -sel clip`z

Sobald sich etwas in Vims Buffer befindet, lässt sich mit F6 dieser Inhalt in die Zwischenablage kopieren und wie gewohnt mit STRG+V in eine X-Anwendung einfügen. Anders herum geht es mit F7 innerhalb von Vim, wenn man zuvor einen Text in einer grafischen Anwendung kopiert hat.

Xclip und Elinks

Ich will nun niemanden zu Textbrowsern wie Elinks bekehren, aber es gibt auch Anwendungsfälle, in denen sie sich sehr gut mit grafischen Browsern und anderen Anwendung ergänzen. Es gibt leider Webseiten, die lassen sich selbst mit modernen Rechnern nur schwerfällig betrachten, wenn Javascript und Flash die Überhand zu nehmen scheinen. Ich benutze deswegen zum Download und Anschauen von Youtube-Videos gerne auch Elinks in Kombination mit Youtube-dl und dem MPlayer. Die Konfiguration funktioniert nicht nur mit betagten Oldtimern, sondern spart mir auch die Zeit beim Auffinden von neuen Videos.

Durch die Brille eines Textbrowsers betrachtet ist Youtube nur eine Ansammlung von Links zu mehr oder weniger gut gelungenen Videos. Im alten Beitrag benutze ich die y-Taste zum Download oder Abspielen eines markierten Links und Alt-y um das Video der aktuell aufgerufenen Seite zu verarbeiten.

Mit Elinks lässt sich ein Link natürlich nicht nur an Youtube-dl oder Mplayer delegieren. Nicht ganz einfach ist es, die Adresse der gerade besuchten Seite in Elinks an die Zwischenablage zu übergeben und den Link anschließend weiterzureichen. Benutzt man jedoch Xclip ist nur ein weiterer Eintrag im Optionsmanager notwendig.

Taste O -> Dokumente -> URI-Delegierung

Jetzt nur noch einen neuen Eintrag namens „Zwischenablage“ hinzufügen, der den folgenden Befehl ausführt.

echo -n %c | xclip -i -selection clipboard

Bedeutet nichts anderes, als dass der Link an Xclip übergeben und in die Zwischenablage kopiert wird, von wo er mit STRG+v in jede X- oder Konsolenanwendung eingefügt wird. Je nach dem, ob nun die y-Taste oder Alt-y aufgerufen wird, lässt sich so der Link der gerade besuchten Webseite oder irgendein beliebiger Link auf einer Seite, der gerade ausgewählt ist, in die Zwischenablage kopieren und dort weiterverarbeiten.

Klingt nach einer esoterischen Lösung, jedoch ist sie außerordentlich schnell. Am besten behält man sie im Hinterkopf, wenn man wieder einmal Elinks, Irssi, Mplayer, Youtube-dl, Wget, Aria2 und andere bekannte Applikationen für die Konsole benutzt.

Rxvt-Unicode

Zum Schluss: Rxvt-Unicode oder kurz urxvt. Ein schlanker Terminal-Emulator, der über Unicode- und Perl-Unterstützung verfügt. Bert Münnich hat eine nette Sammlung von nützlichen Perl-Erweiterungen für urxvt zur Verfügung gestellt, darunter auch das Clipboard-Skript. Welche Veränderungen man dafür in der .Xdefaults/.Xresources vornehmen muss, steht z.B. im Gentoo-Wiki.

Mit Xclip und der Perl-Erweiterung ist es danach möglich auch Text in die Zwischenablage zu kopieren und umgekehrt auch von X-Anwendungen mit Control-v in Rxvt-Unicode einzufügen.

Kopiert das Clipboard-Skript nach /usr/lib/urxvt/perl, um es global verfügbar zu machen. Meine Optionen für die .Xdefaults sind dann:

urxvt*perl-lib:         /usr/lib/urxvt/perl
urxvt*perl-ext-common:  default,clipboard
urxvt.keysym.A-c:     perl:clipboard:copy
urxvt.keysym.A-v:     perl:clipboard:paste
urxvt.keysym.A-C-v:   perl:clipboard:paste_escaped
urxvt.clipboard.copycmd:  xclip -i -selection clipboard
urxvt.clipboard.pastecmd: xclip -o -selection clipboard

Hier wird der Pfad zu den Perl-Erweiterungen definiert und die neue Erweiterung clipboard freigeschaltet. Die restlichen Zeilen legen die Tastenkombinationen fest, mit denen man Text vom Terminal in die Zwischenablage kopieren und umgekehrt auch wieder einfügen kann. Wichtig ist auch hier, dass sowohl für das Kopieren als auch für das Einfügen Xclip verwendet wird.

Fazit

Ich bin mir sicher, jeder stößt im Laufe der Zeit auf das Kopieren-und-Einfügen-Problem. Zwar ist die Standardlösung mit dem Markieren von Text mit der Maus und dem Einfügen mit der mittleren Maustaste sehr bequem und dazu auch noch äußerst schnell ausgeführt, jedoch funktioniert das bei umfangreich formatiertem Text nicht immer bestens. Mit Xclip gibt es ein sehr leichtgewichtiges Programm, dass das Leben auf der Konsole auf jeden Fall angenehmer macht. 🙂

hnb: Dein Notizbuch für die Konsole

Wohin mit den Gedanken zu Linux, wenn sie wieder einmal haltlos umhergeistern, während man gerade versucht sich auf etwas ganz anderes zu konzentrieren? Manchmal bin ich so nostalgisch angehaucht, dass ich ein Blatt Papier und einen Stift in die Hand nehme, sie schnell niederschreibe und mich dann nach zwei Tagen frage, was ich mir damit eigentlich sagen wollte. Ich weiß: bizarr.

In der Regel benutze ich natürlich irgendein elektronisches Medium als Speicherort und Stütze für alle wichtigen und unwichtigen Gedankengänge. Gute Dienste leisten mir der schlichte aber effektive Leafpad Editor oder Osmo, mit dem sich auch Termine und Mondphasen im Kalender überwachen und Kontakte merken lassen.

Denkt man etwas länger über das Thema Notizen nach wird einem schnell bewusst, dass es sich hierbei wieder mal nur um schnöden Text handelt. Braucht man dazu einen Dodeca Core, mit 12 GB RAM und 12 TB SSD Festplatte? Vermutlich nein. Es genügt der übliche ältere Rechner und ein schlankes Konsolenprogramm namens hnb.

Hnb gehört zu einer Reihe von Terminplanern und Notizanwendungen, die K.Mandla schon vor geraumer Zeit vorgestellt und empfohlen hat, die ich mir aber bis vor kurzem nicht näher angeschaut habe. Die drei Buchstaben von hnb stehen für hierarchical notebook, ein Notizbuch, welches auf Ncurses zum Zeichnen der Bedienungsoberfläche zurückgreift und sich praktisch auf jeder noch so alten Mühle ohne Einbußen benutzen lässt.

Wie der Screenshot zeigt und das „hierarchisch“ schon andeutet, sind die einzelnen Einträge in hnb in einer Baumansicht gegliedert. Mit den Pfeiltasten navigiert man sowohl nach oben und nach unten und kann mit links/rechts tiefer in die Notizhierarchie hinab- oder auch wieder hinaufsteigen. Ist die Menge an Text zu umfangreich, scrollt man noch schneller mit der Bild-hoch-und-runter Taste.

Ein dickes Plus bei hnb ist, dass dieses kleine Programm sehr einfach nur durch Ausprobieren zu erlernen ist und nach dem ersten Programmstart eine leicht verständliche, kurze und knappe Anleitung bereitstellt, die alles Wesentliche erklärt.

In noch größerer Kürze funktioniert hnb so:

  • Einfach drauf lostippen oder Einfügen drücken und ein neuer Eintrag wird angelegt.
  • Kopieren, Ausschneiden und Einfügen funktioniert genauso wie man das von einer klassischen Desktopumgebung gewohnt ist. STRG+c, STRG+x, STRG+v
  • Man kann mit STRG+f innerhalb von hnb nach Begriffen suchen.
  • Einen Eintrag entfernt man mit (Überraschung) der Entfernen Taste oder STRG+x.
  • Möchte man eine Aktion rückgängig machen geht das mit STRG+z.
  • Mit <> werden Einträge ein- oder ausgerückt.
  • Mit + oder – lassen sich auch Strichpunkte unterhalb der aktuellen Position aus- und wieder einklappen.
  • Mit STRG+s werden Notizen alphabetisch sortiert.
  • Mit STRG+t wird zwischen Listenpunkten und einem Kontrollkästchen (Checkbox) umgeschaltet, welches sich mit STRG+d aus- oder abwählen lässt. Praktisch für jede Todo-Liste.
  • Ebenfalls äußerst nützlich ist die Möglichkeit URLs oder E-Mail-Adressen mit Hilfe von STRG+a direkt im voreingestellten Programm aufrufen bzw. ausführen zu können.
  • Benutzt man Screen sollte man die Tastenkombination STRG+a in der Konfigurationsdatei ~/.hnbrc genauso wie den bevorzugten Browser oder E-Mail-Client umstellen. Ich benutze hier Alpine und Elinks mit hnb, dass sich hervorragend mit den anderen Konsolenfavoriten ergänzt.
  • Hnb hat auch ein Menü, welches man mit ESC erreicht.

Außerdem gibt es noch Vorlagen für Kalender, die sich in hnb einfügen lassen. Ich werde hier voraussichtlich wyrd in Zukunft benutzen, was ich demnächst kurz vorstellen werde. Des Weiteren lassen sich alle Informationen in verschiedene Formate wie XML, HTML, ASCII oder Postscript exportieren. Bleibt zum Schluss nur noch zu sagen, dass hnb ein sehr intuitives und praktisches Programm ist, dessen einziger Mangel nur die fehlende UTF-8 Unterstützung ist.

In Zukunft werde ich es bestimmt öfter benutzen und vielleicht komme ich irgendwann auch einmal auf vimwiki zurück, wenn ich mehr Vernetzung zwischen Einträgen brauche. Doch ab sofort im Hier und Jetzt ersetzt hnb nun erst einmal Osmo zum Speichern und Organisieren wirrer Gedanken. 🙂

Webseiten mit elinks in screen über eine SSH-Verbindung mit rxvt-unicode solarisiert betrachten

Die Überschrift sagt schon alles. Ich vermute ein ähnliches Problem dürfte weniger als ein Milliardstel der Weltbevölkerung betreffen, aber aus Spaß hier die kurze Geschichte.

Ich hatte mich per SSH in den Toshiba Portégé 3110CT alias speedy eingeloggt und wollte nun mit Solarized und meinem neuen 256-Farben-Terminal rxvt-unicode das System updaten und überprüfen, ob mein Blog in elinks irgendwie anders als zuvor aussah. Wenn ich mich remote zu meinem mit Debian Stable betriebenen Laptop verbinde, starte ich danach für gewöhnlich screen, womit es mir leichter fällt mehrere Anwendungen parallel wie mit einem grafischen Fenstermanager zu nutzen.

Als erstes erhielt ich die Fehlermeldung

Error opening terminal: rxvt-unicode

als ich versuchte eine Anwendung wie htop zu starten. Das Problem resultiert daraus, dass das System den Terminal rxvt-unicode-256color nicht kennt und deshalb auch nicht weiß, wie es das aufgerufene Programm darstellen soll. Da das scheinbar ein uraltes Problem ist konnte ich sowohl im englischen Gentoo als auch im deutschen Arch Linux Wiki eine Lösung hierzu finden. Kurz gesagt, muss die Terminfo Datenbank auf den aktuellen Stand gebracht werden und eine Infodatei im versteckten Ordner .terminfo im Home-Verzeichnis des Benutzers auf dem entfernten Rechner angelegt werden.

Im Gentoo-Wiki wird das elegant so gelöst:

infocmp rxvt-unicode | ssh USER@REMOTE_IP ‚mkdir -p .terminfo && cat >/tmp/ti && tic /tmp/ti‘

Auf dem lokalen Rechner werden die Informationen über den verwendeten rxvt-unicode-Terminal abgefragt und über SSH auf die entfernte Maschine geschickt, wo die Infodatei mit Hilfe von tic von einem Quellformat in ein kompiliertes Format umgewandelt wird. Danach konnte ich dann wie gewohnt Programme öffnen.

Obwohl ich den Terminaltyp in elinks nicht auf 256 Farben eingestellt hatte, sondern weiterhin bei den 16 ANSI Farben belassen hatte, wurde meine Webseite ohne weiteres Zutun schon in den Solarized-Farben dargestellt. Als allgemeiner Tipp solltet ihr bei Farbproblemen % in elinks drücken, womit man zwischen verschiedenen Dokumentfarben umschalten kann. Ich verstehe nur noch nicht, warum bei manchen Farbkombinationen die Schrift fett dargestellt wird und bei manchen normal. Vermutlich hat das etwas mit dem ANSI-Farbcode zu tun. Und so sieht gambaru in elinks solarisiert aus. 😉

Aus elinks mach Firefox

„Seltsam“, dachte ich. Als ich eine der Vorzüge des modernen Web, Google Mail, einmal mit elinks erkunden wollte, scheiterte der Spaß schon beim Login.

Sollte er aber nicht, da elinks mit Formularfeldern und der Übertragung von Daten mit POST ansonsten gut zurecht kommt. Ich erninnerte mich dann wieder in der c’t gelesen zu haben, dass selbst Opera mittlerweile von einigen prominenten Seiten ausgeschlossen wird. Wie sollte es da einem Exot wie elinks anders gehen?

Natürlich fiel K.Mandla dieses Problem vor einiger Zeit auch schon auf, weswegen ich nur noch seinen Tipp in die Tat umsetzen und den user-agent von elinks auf Firefox umändern musste.

In Elinks findet sich die Option hierfür im Optionsmanager „o“ unter Protokolle->HTTP->Benutzer-Programm Identifikation.

Die magische Zeichenkette könnte z.B. so aussehen, womit man sowohl Firefox als auch ein 64 bit Betriebssystem und englische Sprache vorgaukelt.

Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5

Die Weisheit „Kleider machen Leute“ trifft so auch unumwunden auf die elektronische Welt zu.

Als netter Nebeneffekt konnte ich mich danach nicht nur in Google Mail einloggen, auch der kurze Lag bei Aufruf größerer Seiten war verschwunden. Die Darstellung mancher Seiten ändert sich im positiven Sinne ebenfalls, da der Webserver nun davon ausgeht mit Firefox zu kommunizieren.

Fazit: Elinks war unschuldig. Sollten in Zukunft ähnliche Probleme auftreten, hat Google vermutlich Firefox 3.5 auf die Schwarze Liste gesetzt, wodurch wiederum nur ein erneutes Ändern des user-agents hilft.

Falls euch Alpine oder Mutt also zu langweilig wird, leistet elinks beim Email lesen gerne Hilfe.

Und so sieht Google Mail in elinks aus. 😉

Der universelle Browser namens elinks

Als ich vor zwei Jahren ernsthaft damit begann nach alternativer Software für die Konsole zu suchen, assoziierte ich mit Textbrowsern noch so etwas wie w3m oder lynx, die ich in den ersten Jahren mit Linux ausprobiert hatte. Schließlich bin ich dann auf K.Mandlas Artikel „Howto: Use elinks like a pro“ gestoßen, der zu diesem Zeitpunkt auch schon wieder drei Jahre alt war.

Irgendwie erscheint die Verwendung eines Textbrowsers im Jahr 2011 ein Anachronismus zu sein, etwas was in die flashige, Javascript-animierte Online-Welt nicht mehr richtig passen mag. Dabei ist Elinks wohl der Textbrowser, der am ehesten an die Funktionalität eines grafischen Browsers heranreicht. Die Darstellung und Formatierung von Webseiten ist erstaunlich gut, obwohl er sich nur der universellen Schnittstelle schlechthin bedient – Text .

Elinks lässt sich auch durch verschiedene Skriptsprachen wie LUA, Perl oder Ruby erweitern. Dafür verzichtet man auf Javascript, Javaapplets und Flash. Ich kenne zwar keine Sicherheitsstudien zu elinks, aber allein das Fehlen dieser potentiellen Einfallstore und die Tatsache, dass https und SSL unterstützt wird, lassen mich ruhig schlafen.

Was ist nun so toll an einem Textbrowser? Für mich besteht das Universelle in elinks darin, dass er mich nicht darauf einschränkt, welche Hardware ich nutzen muss, um eine Information im Internet zu finden. Egal ob es der 15 Jahre alte Toshiba Satellite 220 cs mit 16 MB RAM oder der vor Kraft strotzende Intel 2 Duo mit 4 GB RAM ist, elinks erledigt einfach die Arbeit.

Arbeite ich unter X öffne ich einfach den Terminalemulator, gebe elinks ein und 1 Sekunde später befinde ich mich in der Adresszeile des Browsers. Adresse eintippen, Enter, Seite ist da. Da die Google-Suche schon als Smart Prefix definiert worden ist, genügt ein vorangestelltes g und der Suchbegriff um direkt zu den Suchergebnissen zu gelangen.

Das Angenehme: Elinks lässt sich sowohl effizient von der Tastatur als auch mit der Maus steuern. Ein typischer Ablauf sieht so aus:

  1. Elinks starten, URL in Adresszeile eingeben oder mit Hilfe eines Smart Prefix direkt nach einem Suchbegriff suchen. Elinks merkt sich Eingaben. Pfeiltaste Hoch und Runter bringt alte Eingaben hervor. Mit „g“ ruft man jederzeit die Adresszeile wieder hervor.
  2. Mit den Pfeiltasten für Hoch- und Runter zu den Links navigieren.
  3. Mit ENTER oder der Pfeiltaste nach Rechts folgst du dem Link. Mit der Pfeiltaste nach links geht es eine Seite zurück.
  4. Drücke „t“ und ein Tab öffnet sich (ja elinks kann Tabs!). Wechsle mit <> zwischen den Tabs hin und her und schließe sie wieder mit „c„.
  5. Gefällt dir eine Seite, drücke „a“ und speichere sie als Lesezeichen. Um alle deine Lesezeichen anzuzeigen, drücke „s„.
  6. Zeigt der Link zu einer Datei, die du herunterladen möchtest, drücke „d„. Es können mehrere Downloads parallel und auch im Hintergrund ausgeführt werden.
  7. Am schnellsten findet man eine bestimmte Information indem man wie bei vim mit „/“ die Suche öffnet, den Suchbegriff eingibt und mit n vorwärts und mit N rückwärts sucht. Als Alternative bietet sich auch die Zeichenweise Suche an, die mit „#“ gestartet wird.

Mit einem Linksklick am oberen Rand von elinks lässt sich das Menü öffnen, welches man auch mit F10 oder ESC erreichen kann. In einer grafischen Umgebung gibt es auch ein Rechtsklick-Menü.

Die Einstellungsmöglichkeiten sind zahllos. Mit „o“ lässt sich der Optionsmanager und mit „k“ der Tastenbelegungsmanager öffnen.

Die Darstellung der Farben in Elinks ist abhängig von den individuellen Vorlieben und des verwendeten Terminals. Am besten man navigiert im Menü zu Einstellungen->Terminaleinstellungen und passt das Ganze an.

Benutzt man also z.B. das solarized Thema könnte ein Blogpost z.B. so aussehen.

WordPress-Blogs und jede Webseite, die Wert auf Standards legt, lassen sich gut darstellen und angenehm lesen:

Auch Bilder lassen sich in einem Textbrowser mit Hilfe externer Programme wie feh anzeigen.

Wie bei jedem neuen Programm brauch man etwas Zeit um alle Fähigkeiten kennenzulernen. Verwirrend ist am Anfang sicherlich das Verhalten von Elinks bei Formularfeldern. Man sollte zuerst auf das Feld mit den Pfeiltasten für Hoch- und Runter navigieren und danach ENTER drücken. Erst dann lässt sich etwas in das Feld schreiben. Gibt es mehrere Felder, muss man unbedingt mit den Pfeiltasten zum nächsten Feld navigieren, bevor man aus Versehen erneut ENTER drückt, was dazu führt, dass die Eingabe per POST gesendet wird.

Ich benutze mittlerweile Elinks regelmäßig auf den älteren Laptops und auf dem modernen Dual-Core-Rechner als Sekundärbrowser neben Firefox/Iceweasel. Insbesondere ist Elinks in Kombination mit meinem Feedreader canto zu gebrauchen, für das Rtorrent-Setup und, man glaubt es kaum, auch als Hilfsmittel um Youtube-Videos ohne Flashplayer mit Elinks und Mplayer abzuspielen.

Elinks kann zwar nicht alles, aber gerade wenn es nur um Text und Informationssuche geht, gelingt mit ihm vieles schneller. Fotoblogs und Flashseiten sind nicht seine Domäne. Gut geeignet ist er hingegen, wenn man überprüfen möchte, ob die eigene Seite standardkonform und barrierefrei ist. Für weitere Screenshots und Ideen empfehle ich nochmal K.Mandlas Post. Viel Spass mit Elinks!