<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>muvik-multigrid &#187; Emacs</title>
	<atom:link href="http://www.muvik.de/tag/emacs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muvik.de</link>
	<description>open source - engineering - programming</description>
	<lastBuildDate>Wed, 28 Jul 2010 07:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Emacs Macro definieren, benennen, speichern</title>
		<link>http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/</link>
		<comments>http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/#comments</comments>
		<pubDate>Tue, 11 May 2010 14:24:24 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Emacs-Macro]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=565</guid>
		<description><![CDATA[Das Bearbeiten großer Datentabellen mit nur einem Texteditor kann sich sehr mühselig gestalten. Die monotone Arbeit, die sich etwa beim Löschen der gesamten 31 Spalte von insgesamt 211 aus einer Text-Datei entsteht, senkt die Motivation und steigert die Fehleranfälligkeit. Ist man jedoch glücklicher und zufriedener Benutzer des Emacs, so steht dem frühen Feierabend nichts im [...]]]></description>
			<content:encoded><![CDATA[<p class="preview">Das Bearbeiten großer Datentabellen mit nur einem Texteditor kann sich sehr mühselig gestalten. Die monotone Arbeit, die sich etwa beim Löschen der gesamten 31 Spalte von insgesamt 211 aus einer Text-Datei entsteht, senkt die Motivation und steigert die Fehleranfälligkeit. Ist man jedoch glücklicher und zufriedener Benutzer des Emacs, so steht dem frühen Feierabend nichts im Wege. </br> Schnell ein sicheres Macro getippt und automatisiert beliebig oft ausgeführt, hat man die Aufgabe eher in Sekunden statt in Minuten erledigt.</p>
<p><span id="more-565"></span></p>
<h3>Macros allgemein und Emacs-Macros</h3>
<p>Macros stellen eine sehr praktische und einfache Möglichkeit dar, sich das Leben leichter zu machen und sich ständig wiederholende Aufgabe zu automatisieren. Sie stellen sich als unterstützender Helfer in diversen Aufgabe des Arbeitsalltags heraus. Dazu gehören zum Beispiel das Bearbeiten von Tabellen, wie eingangs bereits erwähnt, das Umformatieren von Dateien und das Auszeichen von Text, um nur einige zu nennen.</p>
<p>Auf das simpelste herunter gebrochen, lassen sich Emacs-Macros als eine Reihung von Tastaturbefehlen im Emacs-Style bezeichnen: <code class="bash">C-a C-Space C-e M-w</code> Emacs-Jünger haben es sofort erkannt: die Befehls-Kombination aus dem Beispiel kopiert eine ganze Zeile in die Zwischenablage. Abgesehen davon, dass es etwa unendlich viele Möglichkeiten gibt in Emacs eine Zeile in die Zwischenablage zu kopieren, ist mir bis heute kein Befehl bekannt, womit dies direkt geht. Ohne unnötige Bewegungen des Cursors im Text.
</p>
<p>Diese Tatsache werden im folgenden zum Anlass genommen, um ein Macro aufzunehmen, zu benennen und zu speichern. Dadurch steht es in jeder Emacs-Session zur Verfügung und kann mit einer kurzen Kombination aufgerufen werden. </br> Doch zuvor noch ein einleitendes Beispiel.</p>
<h3>Beispiel: Löschen einer Tabellenspalte</h3>
<p>Bei Datensätzen in Tabellenform, die in Textdateien gespeichert sind, kommt es nicht selten vor, dass eine Spalte verschoben oder entfernt werden muss. </br>Betrachten wir folgenden Datensatz:<br />
<code class="bash">          1          2          3          4          5<br />
          1          2          3          4          5<br />
          1          2          3          4          5<br />
          1          2          3          4          5<br />
          1          2          3          4          5</code><br />
Die dritte Spalte soll nun entfernt werden und in einer Datei namens scr.dat gespeichert werden.
</p>
<p>Unabhängig davon, wo sich der Cursor zu Beginn befindet, lässt sich diese Aufgabe mit dieser Kombination vollständig lösen:<br />
<code class="bash">Neue Datei anlegen: C-x-f scr.dat ENTER C-x b<br />
An den Dateianfang: M-<<br />
Macro-Aufnehmen starten: C-x (<br />
Macro-Befehle: C-a M-f M-f ENTER M-b M-b C-f C-k C-k C-n C-x b ENTER C-y C-x b ENTER<br />
Macro-Aufnahme beenden: C-x )<br />
Macro-Probe: C-x e<br />
Macro automatisch 50 mal ausführen: C-u 50 C-x e</code><br />
Das von Erfolg gekrönte Durchführen der genannten Befehle gipfelt in zwei Dateien:<br />
<code class="bash">          1          2          4          5<br />
          1          2          4          5<br />
          1          2          4          5<br />
          1          2          4          5<br />
          1          2          4          5</code><br />
und<br />
<code class="bash">          3<br />
          3<br />
          3<br />
          3<br />
          3</code><br />
Bleibt nur noch zwei schnelle C-x-s und die Dateien sind gespreichert.</p>
<h3>Definieren und Speichern eines Emacs-Macros</h3>
<p>Nachdem die Tragweite und Wichtigkeit der Emacs-Macros mit dem Beispiel angedeutet wurde, kommen wir nun zu einigen Details: wie wird eine Macro aufgenommen, ausgeführt und gespeichert?</p>
<h4>Aufnehmen eines Macros</h4>
<p>Das Aufnahme-Prinzip ist schon von diversen anderen Programmen auch aus der Windows-Welt bekannt. Ein Startbefehl und ein Endbefehl bilden den Rahmen, alle Befehle dazwischen das Macro:<br />
<code class="bash">Startbefehl: C-x (<br />
Endbefehl:   C-x )</code><br />
Bei Auftreten eines Fehlers während der Definition eines Macros wird die Aufnahme beendet und Emacs vergisst die bis dahin eingegebenen Befehle. Das Gleiche tritt ein, wenn ein Macro mit C-g abgebrochen wird.</p>
<h4>Testweise Ausführen eines Macros</h4>
<p>Fehler können sich bei der Macro-Definition leicht einschleichen, weswegen ein Probedurchlauf immer anzuraten ist. Um das zuletzt definierte Macro nun zu diesem Zweck einmal laufen zu lassen, bedient man sich des folgenden Befehls:<br />
<code class="bash">zuletzt definiertes Macro einmal ausführen: C-x e</code></p>
<h4>Emacs-Macro speichern</h4>
<p>Jetzt machen wir uns an das Eingemachte: Um ein Macro am nächsten Tag ohne erneute Definition wiederverwenden zu können, muss es auf einen Namen getauft und gespeichert werden.</p>
<p>Damit die ganzen Anstrengungen an dieser Stelle nicht umsonst sind, erinnern wir uns an das große Ziel: Macro zum Kopieren einer ganzen Zeile. Dazu nehmen wir das Macro erst auf, benennen es mit "copy-line" und speichern es in der Datei emacs.macros:<br />
<code class="bash">Macro aufnehmen: C-x ( C-a C-Space C-e M-w C-x )<br />
Macro benennen: M-x name-last-kbd-macro ENTER copy-line ENTER<br />
Datei emacs.macros öffnen: C-x-f /PFAD/ZU/emacs.macros ENTER<br />
Macro schreiben: M-x  insert-kbd-macro ENTER copy-line ENTER<br />
Datei speichern: C-x-s</code><br />
Das Ergebnis kann sich sehen lassen: in nur wenigen Sekunden haben wir das Macro gespeichert. Was noch fehlt ist der kurze Befehl, mit dem das Macro bei der nächsten Emacs-Session wieder verwendet werden kann.</p>
<h4>Tastaturbefehl für ein Emacs-Macro festlegen</h4>
<p>Standardmäßig sind für eigene Macros die folgende Keybinding, also Tastaturkurzbefehle, vorgesehen:</p>
<ul>
<li>C-x C-k 0 ... 9</li>
<li>C-x C-k A ... Z</li>
</ul>
<p>Ehrlich zugegeben, sind die für eigene Macros vorgesehenen Keybindings ziemlich lang, wenn man die "copy-line" Kombination vergleichsweise heranzieht. Nichtsdestotrotz wollen wir einen eigenen Befehl für "copy-line". </p>
<p>Wie bereits erkennbar wurde, ist das Macro in einer eigenen emacs.macros-Datei gespeichert worden. Diese muss nun in die .emacs-Datei geladen und ein globaler Key festgelegt werden. Das geschieht durch Eintragen der folgenden Zeilen in die .emacs-Datei:<br />
<code class="bash">(load-file "/PFAD/ZU/emacs.macros")<br />
(global-set-key "\C-x\C-kK" 'copy-line)</code><br />
Gesagt, getan und nun fehlt zum Glücklichsein nur noch ein Neustart von Emacs.</p>
<h3>Merkmale guter Emacs-Macros</h3>
<p>Emacs-Macros sollen uns Arbeit ersparen. Dieser Gewinn kann ganz schnell durch ein fehlerhaftes Macro wieder zunichte gemacht werden. Damit dieser Horror-Szenario so selten wie möglich auftritt, können einige wenige Richtlinien befolgt werden:</p>
<ul>
<li>Absolute Befehle verwenden: nicht C-f C-f C-f sondern M-f um zum nächsten Wort zu springen</li>
<li>Eindeutige Befehle verwenden: nicht C-s C-s für die letzte Suche, sondern C-s SUCHTEXT ENTER</li>
<li>Keine Annahmen über Position des Cursors im Text, bzw. den Cursor zu Beginn eines Macros richtig positionieren.</li>
<li>Am Ende den Cursor so positionieren, dass einer Wiederholung nichts im Wege steht.</li>
</ul>
<p>Mit diesen Ratschlägen sollten wir für die Emacs-Macros gerüstet sein.
</p>
<h3>Schlusswort</h3>
<div id="attachment_606" class="wp-caption alignright" style="width: 132px"><a href="http://www.amazon.de/gp/product/0596006489?ie=UTF8&#038;tag=wwwmuvikde-21&#038;linkCode=as2&#038;camp=1638&#038;creative=19454&#038;creativeASIN=0596006489"><img src="http://www.muvik.de/wp-content/uploads/2010/05/GnuEmacs.jpg" alt="Buchcover: GNUEmacs" title="GNUEmacs" width="122" height="160" class="size-full wp-image-606" /></a><p class="wp-caption-text">Buch von Debra Cameron*</p></div>
<p>Emacs ist ein beeindruckendes Stück Software. Auch bei einer intensiven Beschäftigung kann man beinahe jeden Tag etwas neues an dem Editor entdecken.  Seien es Macros oder die verschiedenen Modes. Für Insider: es gibt sogar einen <a href="http://polymerfem.com/showthread.php?62-Emacs-modes-for-editing-ABAQUS-and-LS-DYNA-input-files" target="_blank">Emacs-Mode für ABAQUS-Input Dateien</a>.<br />
</br><br />
Bewährte Hilfe bei dem Erlernen der Bedienung und Verwendung des Emacs-Editors kann im <a href="http://www.amazon.de/gp/product/0596006489?ie=UTF8&#038;tag=wwwmuvikde-21&#038;linkCode=as2&#038;camp=1638&#038;creative=19454&#038;creativeASIN=0596006489">"Learning GNU Emacs" von Debra Cameron*</a> gefunden werden. Das Buch ist zwar auf englisch, jedoch einfach geschrieben und gut verständlich. </p>
<p>(* Partnerlink)</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/">Permalink</a> |
<a href="http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/#comments">2 Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/&title=Emacs Macro definieren, benennen, speichern">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/&title=Emacs Macro definieren, benennen, speichern">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/&title=Emacs Macro definieren, benennen, speichern">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/emacs/" rel="tag">Emacs</a>, <a href="http://www.muvik.de/tag/emacs-macro/" rel="tag">Emacs-Macro</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/05/11/emacs-macro-definieren-benennen-speichern/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kurztipp 4: Emacs anpassen</title>
		<link>http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/</link>
		<comments>http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 09:05:09 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Kurztipps]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Emacs-Tipp]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=458</guid>
		<description><![CDATA[Heute im Fokus: Emacs ist ein toller Editor, welcher es eigentlich garnicht verdient hat mit dieser Bezeichnung beschimpft zu werden. Für viele Emacs-Fans stellt das Programm weitaus mehr dar als nur einen Editor. Ich verwende seit meinem Industriepraktikum ebenfalls den Emacs und stelle in diesem Kurztipp einige Möglichkeiten dar, wie der Emacs an seine eigenen [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Viktors Kurztipp" src="http://muvik.de/categorie_images/viktorskurztipp.gif" title="Viktors Kurztipp zu diversen Themen" width="443" height="98" />
<p class="preview">Heute im Fokus: Emacs ist ein toller Editor, welcher es eigentlich garnicht verdient hat mit dieser Bezeichnung beschimpft zu werden. Für viele Emacs-Fans stellt das Programm weitaus mehr dar als nur einen Editor. Ich verwende seit meinem Industriepraktikum ebenfalls den Emacs und stelle in diesem Kurztipp einige Möglichkeiten dar, wie der Emacs an seine eigenen Bedürfnisse angepasst werden kann.</p>
<p><span id="more-458"></span>
<p>Der Emacs ist ein mächtiges Werkzeug, die Lernkurve ist sehr steil und die Gewöhnung an die Tastaturkürzel geht ebenfalls nicht von heute auf morgen. Sind die ersten Hürden jedoch genommen, so kann der Emacs extrem stark an die persönlichen Vorzüge angepasst werden. Auch das Anpassen des Editors ist sicherlich nicht jedermanns Sache, da es in der Programmiersprache <a href="http://de.wikipedia.org/wiki/LISP" target="_blank">Lisp</a> erfolgt. Möchte man jedoch nur kleine Konfigurationen vornehmen, dann braucht man sich nicht auch noch in Lisp einarbeiten.</p>
<p>Im folgenden möchte ich in aller Kürze auf drei Einstellungen eingehen, welche in die Emacs-Konfigurationsdatei .emacs geschreiben werden.</p>
<h3>Grundlegendes zur Emacs-Konfiguration</h3>
<p>Ganz allgemein gesagt, erfolgt die Emacs-Konfiguration durch die Zuweisung eines Wertes zu einer bestimmten Variablen als Lisp-Anweisung. Das kann in folgender Struktur erfolgen:<br />
<code class="bash">(setq variable wert)</code><br />
Diese Code-Zeile entspricht in Lisp einem Funktionenaufruf. Die Funktion ist hierbei <strong>setq</strong>, welche diversen Variablen die entsprechenden Werte zuweist. Würde die Konfiguration in Python erfolgen, dann sehe die Zeile so aus:<br />
<code class="bash">setq(variable, wert)</code><br />
Folglich sind &#8220;variable&#8221; und &#8220;wert&#8221; Argumente der Funktion. Es ist interessant zu bemerken, dass in Lisp die Funktion, wie zum Beispiel eine Addition &#8220;+&#8221;, vor den Argumenten steht:<br />
<code class="bash">(+ 10 3)</code></p>
<p>Das jedoch nur am Rande. Auf diese Weise erfolgt nun die Anpassung des geliebten Emacs.</p>
<h3>Scroll-Leiste rechts platzieren</h3>
<p>Die erste Anpassung, welche eine ganz wichtige ist, unterstützt etablierte Gewohnheiten. Konkret handelt es sich hierbei um die Scroll-Leiste, welche beim Emacs standardmäßig auf der linken Seite zu finden ist. Ich bin gewohnt diese auf der rechten Seite zu bedienen und verschiebe sie daher dort hin:</p>
<p><code class="bash">(set-scroll-bar-mode `right)</code><br />
Hierbei ist nun &#8220;set-scroll-bar-mode&#8221; die Funktion, welche das Argument &#8220;right&#8221; übergeben bekommt. Das Hochkomma verhindert, dass &#8220;right&#8221; in irgendeiner Weise ausgewertet wird.</p>
<h3>Anzeigen von Zeilen- und Spaltennummern</h3>
<p>Weiterhin ist es oft sehr nützlich zu wissen, in welcher Zeile und Spalte der Cursor sich gerade befindet. Emacs zeigt die Zeile standardmäßig an, die Spaltennummernanzeige muss noch aktiviert werden:<br />
<code class="bash">(setq column-number-mode t)<br />
(setq line-number-mode t)</code><br />
Durch diese zwei Zeilen werden die Variablen &#8220;column-number-mode&#8221; und &#8220;line-number-mode&#8221; auf t, also true, gesetzt und die Infos in der Fussleiste angezeigt.</p>
<h3>Farben anpassen</h3>
<p>Da ich recht häufig und auch recht lange mit dem Editor arbeite, habe ich mich für einen schwarzen Hintergrund und eine helle Vordergrundfarbe entschieden und diese mit folgenden Codezeilen eingestellt:<br />
<code class="bash">(setq default-frame-alist<br />
   '((foreground-color  . "snow1")<br />
    (background-color  . "gray3")<br />
    (cursor-color      . "red")<br />
    ))<br />
</code> </p>
<h3>Resultat</h3>
<p>Das waren nur einige grundlegende Einstellungsmöglichkeiten. Um dem Leser Appetit auf mehr zu machen und zu motivieren in diese Richtung weiter zu arbeiten, hier noch ein Bildausschnitt von meinem Emacs:<br />
<div id="attachment_476" class="wp-caption alignnone" style="width: 453px"><a href="http://www.muvik.de/wp-content/uploads/2010/04/emacs_custom.png"><img src="http://www.muvik.de/wp-content/uploads/2010/04/emacs_custom-e1271192468407.png" alt="Emacs, dunkler Hintergrund, Syntaxhighlighting" title="Emacs mit dunklem Hintergrund" width="443" height="302" class="size-full wp-image-476" /></a><p class="wp-caption-text">Emacs mit dunklem Hintergrund</p></div>
</p>
<p>Nun bin ich am Ende des 4.Kurztipps, welcher jetzt gar nicht so kurz geworden ist. Ich würde mich freuen, wenn der eine oder andere Kommentator sich als Vi-Benutzer outen würde und seine Erfahrungen berichten würde.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/">Permalink</a> |
<a href="http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/&title=Kurztipp 4: Emacs anpassen">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/&title=Kurztipp 4: Emacs anpassen">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/&title=Kurztipp 4: Emacs anpassen">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/emacs/" rel="tag">Emacs</a>, <a href="http://www.muvik.de/tag/emacs-tipp/" rel="tag">Emacs-Tipp</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/04/14/kurztipp-4-emacs-anpassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

