Emacs: shell-mode erträglicher gestalten
Mit shell-mode steht dem Emacs-Nutzer eine sehr einfache Shell-Umgebung zur Verfügung. Der shell-Buffer ist aus Sicht der in ihm gestarteten Programme ein “dummes” Terminal, einen Zeilen-Editor der Shell kann man daher nicht verwenden.
Diese primitive Umgebung ist ein Feature: Wenn man zum Beispiel die Ausgabe eines in dieser Shell gestarteten Programms weiterverwenden will, so kann man die aus Emacs gewohnten Tastenkürzel, Makros, etc. verwenden und ist nicht etwa darauf angewiesen, die Maus in die Hand zu nehmen, um aus einem xterm Text zu kopieren.
Andererseits gehen viele Kommandozeilen-Programme davon aus, daß zumindest ein Texteditor und ein Pager zur Verfügung steht. Meist kommen hier vi und more zum Einsatz, die auf einem dummen Terminal natürlich nicht wirklich sinnvoll benutzbar sind. (Überdies mutet es doch absurd an, aus Emacs heraus einen anderen Editor aufrufen zu wollen, wo es doch mit viper-mode eine ganz hervorragende vi-Emulation gibt…)
Die Lösung muß natürlich dafür sorgen, daß etwas anderes als vi bzw. more aufgerufen wird. Dafür gibt es die Umgebungsvariablen EDITOR, VISUAL und PAGER. Emacs selbst läßt sich “von außen” mit einem Programm namens gnuclient fernsteuern, und das kommt hier zum Einsatz. Zunächst einmal muß gnuserv, das Gegenstück zu gnuclient, im Emacs selbst gestartet werden, am besten direkt in .emacs:
(require 'gnuserv)
(gnuserv-start)
; für gnuclient unter X keinen neuen Frame erzeugen
(setq gnuserv-frame (selected-frame))
Als Ersatz für den Pager gibt es ein kleines Shellskript gnuclient-cat, das nur Dateien mit mehr als 20 Zeilen in einen Emacs-Buffer lädt:
#!/bin/sh
TEMPFILE=`tempfile`
cat "$@" > $TEMPFILE
if [ `wc -l < $TEMPFILE` -gt 20 ]; then
gnuclient $TEMPFILE
else
cat $TEMPFILE
fi
rm -f $TEMPFILE
Im Startup-Skript der Shell muß dann noch vereinbart werden, daß ein anderer Editor und ein anderer Pager zum Einsatz kommen soll, wenn die Shell aus Emacs heraus gestartet wird:
if [ "$EMACS" = t ]; then
export VISUAL=gnuclient
export EDITOR=gnuclient
export PAGER=~/.my/bin/gnuclient-cat
fi
-
14.12.2006 / 13:28
Da ich Emacs leider nicht staendig nutze, kann ich nur wenig nachvollziehen, was genau diese Shell-Mode macht. Ist es eine Terminalemulation?
Wozu nutzt du das ausgearbeitete Feature?
-
14.12.2006 / 14:36
shell-mode ist ein normaler Emacs-Buffer, der die Eingaben an
ein eine Shell weiterreicht, deren Ausgaben dann wieder im Buffer
landen. Für eine Terminalemulation ist das ein bißchen wenig, und
daher wird auch TERM=dumb gesetzt. Aber ich nutze shell-mode,
gerne, weil Dinge wie Copy&Paste sehr einfach funktionieren.Wenn Du in einem xterm TERM=dumb setzst und vi, more, less …
aufrufst, siehst Du gleich, warum Programme, die einen Pager oder einen
Editor aufrufen wollen (Beispiel: cvs, svn, …) im
shell-mode ohne die Anpassungen nicht benutzbar sind.Für die Leute, die unbedingt vi, less oder *spuck* nano im Emacs
benutzen wollen, gibt es eine eine Terminalemulation namens
term. bb (das aalib-Demo) läuft prinizipiell darin auch, aber
das ist dann ein mehr als dekadenter Umgang mit Systemresourcen.
Hinterlasse einen Kommentar
XHTML: Folgende Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
navigation
- [1] was ist [ pimp my shell ] ?
- [2] programme
- [3] skripte / dotfiles
- [4] shellshots
- [5] mitmachen
- [6] autoren
- [7] einloggen
- [8] impressum
aussehen
ältere beiträge
- 08.26 lsr – Das fehlende Listing
- 06.18 wirklich? so einfach?
- 06.17 fbcmd – update
- 06.04 worklog – die zeit im griff
- 05.30 google-reader >> snownews
- 05.28 fbcmd – facebook in der shell
- 05.28 bitlbee – alles in einem!
- 05.16 NoPaste/pastebin-Service über die Shell mit curl und sprunge.us
- 04.15 Die Heirloom-Tools – Unix unter Linux
- 02.13 dvtm – dwm für die Konsole
beitrags-archiv
- August 2010 (1)
- Juni 2010 (3)
- Mai 2010 (3)
- Mai 2008 (1)
- April 2008 (1)
- Februar 2008 (4)
- Januar 2008 (1)
- Dezember 2007 (2)
- September 2007 (1)
- August 2007 (1)
- Juli 2007 (6)
- Juni 2007 (1)
kategorien
- allgemein (17)
- berichte (7)
- fun (2)
- gnu_screen (2)
- hintergrundwissen (3)
- how-tos (11)
- internes (6)
- programme (31)
- shells (6)
- tutorials (6)
- user-skripte (2)
- vim (5)
- webseiten (5)
2 Kommentare
Zum Kommentarformular | Kommentar rss [?] | trackback uri [?]