Table of Contents

Ein Mercurial-Log zerlegen

Ich möchte die Ausgabe von hg log zerlegen, so dass der Logeintrag jeder Revision in eine Datei geschrieben wird, deren Dateiname die Revisionsnummer aus dem Log ist.

Ein Beispiel für die Ausgabe von hg log:

changeset:   66:efc0519aae42
user:        solar
date:        Mon Nov 21 18:04:55 2005 +0000
files:       functions/string/strncpy.c
description:
Added test driver, fixed off-by-one bug.


changeset:   65:1b840d800436
user:        solar
date:        Sun Nov 20 17:25:25 2005 +0000
files:       functions/string/memset.c
description:
Added test driver.

Mit dem Cursor in der ersten Spalte der ersten Zeile:

HTML-Auszeichnung für Unicode Charakternamen

In einem umfangreichen HTML-Dokument stehen Unicode-Charakternamen der folgenden Form:

Das Zeichen U+00A0 no-break space sollte im Allgemeinen...

Der Charaktername (hier: “no-break space”) soll durch ein <span>-Element in Kapitälchen gesetzt werden. Allerdings gibt es in dem Dokument tausende unterschiedlicher Charakternamen unterschiedlicher Längen. Manchmal steht zwischen dem Code Point (hier: U+00A0) und dem Charakternamen noch das entsprechende Zeichen; dieses soll nicht mit in das <span>-Element.

Hier war jede Menge Handarbeit gefragt, und ich wollte die Aufgabe mit so wenig Tastenanschlägen wie möglich erledigen. Also habe ich mir zwei Makros und fünf Tastaturmappings angelegt.

Die beiden Makros, ausgehend von einer Cursorposition auf dem letzten Buchstaben des Charakternamens, zum Einfassen mit dem gewünschen HTML-Element, wobei das w-Makro das erste Element nach dem Code Point (das Zeichen selbst) ausläßt:

Dann vier Tastaturbelegungen um das Ganze dann einfach durchführen zu können:

Source-Zeilen nach Vorlage sortieren

Ich habe (in meinem Projekt PDCLib) zwei Source-Dateien, die sich mit errno-Werten beschäftigen.

Datei 1:

  { /* No Error        */   0, (char *)"Success" },
  { /* EPERM           */   0, (char *)"EPERM (Operation not permitted)" },
  { /* ENOENT          */   0, (char *)"ENOENT (No such file or directory)" },
  ...
  

Datei 2:

  case 0:
      return errno_texts[0];
  case E2BIG:
      return errno_texts[1];
  case EACCESS:
      return errno_texts[2];
  ...

Jeweils für knapp 80 Einträge. Die Aufgabe ist, die Einträge in Datei 1 in dieselbe Sortierung wie in Datei 2 zu bringen.

Ich öffne beide Dateien in parallelen Fenstern, und füge nach dem Eintrag Success in Datei 1 eine Leerzeile ein. Dann bewege ich mich in Datei 2 auf case E2BIG:.