pfm --- terminal mode file manager for UNIX-systems

Copyright (c) 1995-2003 by peter fuerst

Dieses Programm ist freie Software; es darf verbreitet und/oder geändert werden unter den Bedingungen der "GNU General Public License", wie von der "Free Software Foundation" veröffentlicht - entweder Version 2 oder (wahlweise) jede spätere Version - wie in der beigefügten Datei COPYING beschrieben.

Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich ist, aber OHNE JEDE GEWAEHRLEISTUNG, sogar ohne die implizite Garantie der MARKTFAEHIGKEIT oder der TAUGLICHKEIT FUER EINEN BESTIMMTEN ZWECK. Zu Einzelheiten, siehe die geigefuegte Datei COPYING.

Author:
Peter Fürst, post@pfrst.de


Einführung

pfm ist großenteils durch Paul R. Culley's PFM.COM (1984) für DOS inspiriert, das auf kleinstem Raum (15k) fast alles enthielt, was man (in dieser Umgebung) brauchte, um durch das Dateisystem zu steuern.

Und ein "Utility" wie dieses vermisste ich unter *U*X.

pfm's Philosopie ist schnell erklärt:

Aufruf

pfm kann auf zwei unterschiedliche Weisen aufgerufen werden:

	pfm [-C configuration-file]

	pfm -t

Im ersten Fall wird pfm in der gewöhnlichen Weise als Dateimanager aufgerufen. Hier kann über die -C Option eine optionale Konfigurations datei statt der Voreinstellung $HOME/.pfm/rc angegeben werden.

Im zweiten Fall liest pfm lediglich die Tastendrücke und berichtet, welche Tasten-Werte oder Escape-Sequenzen dabei in curses' verschiedenen keypad modi erzeugt werden. Das hilft, zu überprüfen, ob termcap/terminfo Einträge richtig sind, und diese, falls nötig anzupassen.

Eingabe

Funktionstasten

Üblicherweise werden die Tasten, die im gegenwärtigen Kontext benutzt werden können, entweder im Menue der Kopf- oder Fuß-Zeile angezeigt. Allerdings sind oft zusätzliche oder redundante Tasten verfügbar (um auf jedem Terminal sicherzugehen). (^K steht im folgenden für ctrl+K):

Escape, ^D, ^X brechen die laufende Aktion ab.

Zusätzliche Tasten im Menuemodus:
'1'..'9','0' entsprechende Zifferntasten statt F1..F9,F10
^L zeichnet Bildschirm neu
^V curses-Neustart (wie beim Empfang von SIGWINCH)
Right,'>',Left,'<' rotiert das Kopfzeilenmenue
Home,'h' zum Anfang der Anzeige
End,'l' zum Ende der Anzeige
Down,'j','+' eine Zeile abwärts
Up,'k','-','^' eine Zeile aufwärts
PageDown,^F eine Seite abwärts
PageUp,^B eine Seite aufwärts

Hinweise zur Texteingabe

Die Insert-, Delete-, Backspace-, Home-, End- and Pfeil-Tasten sollten wie erwartet arbeiten.

---

Wenn das Programm nach Texteingabe fragt, kann man verschiedene Platzhalter-Variable verwenden, um Ausdrücke zu bilden, die die aktuelle Datei, das aktuelle Verzeichnis, etc. referenzieren. Jede dieser Variablen wird auch von einer entsprechenden Funktions taste (im Fußzeilen-Menue angezeigt) erzeugt.

Variable FKey bezeichnet
%F F2 Dateiname an der Cursorposition
%N F1 dieser Dateiname ohne Endung
%X F3 Endung dieses Dateinamens
%A F4 das "Alternativ-Verzeichnis", d.h. jenes Verzeichnis,
das zuletzt mit dem chdir Hotkey F7 verlassen wurde
%D F5 Arbeitsverzeichnis
%H F6 (Anfangswert von) $HOME

Eine weitere Variable %U kann genau dann benützt werden, wenn ein URL-Bearbeiter konfiguriert wird. In diesem Kontext steht %U für den Protokoll-Teil des URL (inklusive "//"), während %F gerade den Domain/Datei-Teil bezeichnet.

Diese Variablen sind auch für den Gebrauch in der Konfigurationsdatei gedacht.

---

Die Eingaberoutine bietet immer einen Vorschlag für die aktuelle Eingabe an (üblicherweise die vorhergehende Eingabe im gleichen Kontext). Es kann mehr als einen Vorschlag geben, in diesem Fall kann man durch diese mit den Tasten PageDown, PageUp blättern. Auch eine (Fehler-)Meldung kann aus verschiedenen Teilen bestehen, durch die man auf die gleiche Weise blättern kann.

---

Jede noch nicht bestätigte Eingabe (und damit der Eingabevorschlag) kann mit der ^L (ctrl+L) Tastenkombination gelöscht werden.

Mauseingabe mit ncurses

Wenn pfm mit einer ncurses-Version mit Mausschnittstelle erzeugt wurde, kann mittels Mausklick aus einem Menue ausgewählt oder zu einer Zeile im Datei-Fenster gesprungen werden. Diese Schnittstelle kann zur Laufzeit aktiviert/deaktiviert werden (beachte dazu den Manualeintrag curs_mouse(3X)) oder kann bei der Übersetzung mit -DIGNORE_MOUSE_EVENTS=1 auf der Compiler-Befehlszeile ganz abgeschaltet werden. Beachte: wenn ncurses die Maus von (z.B.) xterm übernommen hat, sind auch xterm's übliche Mausfunktionen ("cut and paste") nicht mehr möglich.

Bemerkung zur Eingabe von Zieldateien

Wenn ein Zielverzeichnis für eine Dateioperation (copy,move,link,...) eingegeben wird, muß eine bestimmte Syntax beachtet werden:
Um eine Datei in ein Verzeichnis dir zu kopieren..., muß dir/ mit abschließendem '/' eingegeben werden. dir ohne '/' bedeutet immer kopiere... auf die Datei dir. Dies hilft dabei, Zweideutigkeiten zu vermeiden, die auftreten könnten, wenn pfm erraten muß, was gemeint war. (Und befreit den Benutzer vom Zwang zu raten, was pfm raten wird ;-)

Laufzeitkonfiguration

Das Konfigurationsmenue

Bei der Definition eines Befehls, ist zu bachten, daß am Eingabetext die Platzhalter-Ersetzung ("wildcard") in zwei Stufen durchgeführt wird.

Beispiel: Das aktuelle Verzeichnis ist /usr/bin, der Cursor steht auf cmd und $HOME steht für /home/me. Dann
definiert die Eingabe: %D/%F -f ~/.rc '\%F\\\~'
das Befehlsmuster: /usr/bin/cmd -f /home/me/.rc '%F\~'
definiert die Eingabe: %D/%F -f \~/.rc '\%F\\\~'
das Befehlsmuster: /usr/bin/cmd -f ~/.rc '%F\~'

die beide als /usr/bin/cmd -f /home/me/.rc 'myfile.c~' aufgerufen werden (vorausgesetzt, der Cursor steht dabei auf myfile.c)

Die Konfigurationsdatei

Wenn auf der Befehlszeile keine andere Konfigurationsdatei (Option -C configfile) angegeben ist, verwendet pfm $HOME/.pfm/rc (und legt diese Datei an, wenn sie noch nicht existiert).

Die Einträge in der Konfigurationsdatei sind gegenwärtig entweder Flags, oder Befehls-Definitionen. Führende oder abschließende Leerzeichen, Tabs, etc. werden von der Befehlsdefinition entfernt.

Als Bool'sche Flag-Werte werden True | Yes | 1 | False | No | 0 erkannt.

Befehle werden mittels system() aufgerufen, deshalb mag die Definition auch Shell-Konstrukte, wie Ausgabeumleitung etc., enthalten. Hinter grundbefehle müssen explizit als solche definiert werden, pfm fügt kein & hinter dem Rücken des Benutzers an.

pfm schreibt alle Einträge, die nicht vom Benutzer definiert wurden, und ihre Vorgabewerte (als Konstante eingebaut oder von Umgebungsvariablen) als Kommentare in die Konfigurationsdatei, so daß dort die vollständige Einstellung zu finden ist. Gegenwärtig werden folgende Einträge in der Konfigurationsdatei erkannt:

pfm.DotFiles: boolean-flag
Bestimmt, ob ".*" Dateien im Verzeichnisfenster angezeigt werden. Voreingestellt ist True.


pfm.Mouse: boolean-flag
Nur für ncurses. Bestimmt, ob ncurses' Maus-Schnittstelle aktiviert werden soll (wenn eingebaut). Voreingestellt ist False.


pfm.DocDir: help-file-directory
Bestimmt das Verzeichnis, in dem pfm's Hilfe- und Dokumentations-Dateien (z.B. diese Datei) installiert sind. Wird von "Hilfe" benötigt. Voreingestellt ist (soweit vorhanden) das Verzeichnis, in dem pfm erzeugt wurde, oder $HOME/.pfm


pfm.PagerPrg: pagercommand
Bestimmt den Datei-"Pager"-Befehl, der vom eingebauten Dateibetrachter bei zeilenorientierter Anzeige oder von "Hilfe" verwendet wird. Dieses Programm muß seine Eingaben von stdin lesen. Voreingestellt ist: $PAGER oder less -dimnu oder more -lu (beachte: hier sind keine Platzhalter ("wildcards") erlaubt).


pfm.Editor: editorcommand arguments
Bestimmt den Editor. Voreingestellt ist: $EDITOR '%F' oder $VISUAL '%F' oder vi '%F'


pfm.Viewer: viewercommand arguments
Bestimmt den Befehl, der statt des eingebauten Dateibetrachters benützt werden soll. Voreingestellt ist die leere Zeichenkette, d.h., der eingebaute Dateibetrachter wird verwendet.


pfm.Cpdir: copydircommand arguments
Bestimmt den Befehl, mit dem ein Verzeichnis in/auf ein anderes kopiert wird. Die Voreinstellung ist Betriebssytem-abhängig, z.B. *BUILTIN* -Rdpv '%D' '%A' oder cpdir -dv '%D' '%A' .
In diesem Kontext stehen '%D' und '%A' jeweils für das Quell- bzw. Zielverzeichnis. *BUILTIN* steht für eine eingebaute Schnittstelle zu "cp -R", die die korrekte Behandlung der verschiedenen (gewünschten) Beziehungen zwischen Quell- und Zielverzeichnis sicherstellt, siehe Zieldateien .


pfm.Mailer: mailercommand arguments
Bestimmt das Bearbeitungsprogramm für mailto:-Links. Voreingestellt ist: $MAILER '%F' oder mail '%F'


pfm.UrlHdlr: browsercommand arguments
Bestimmt das Bearbeitungsprogramm für alle URLs ohne spezifisches Bearbeitungsprogramm. Voreingestellt ist: $BROWSER '%U%F' oder lynx '%U%F'


pfm.Www: browsercommand arguments
Bestimmt das Bearbeitungsprogramm für WWW (http:)-Links. Voreingestellt ist: $BROWSER '%U%F' oder lynx '%U%F'


pfm.Ftp: ftpcommand arguments
Bestimmt das Bearbeitungsprogramm für ftp:-Links. Voreingestellt ist: ftp '%F'


pfm.Telnet: telnetcommand arguments
Bestimmt das Bearbeitungsprogramm für telnet:-Links. Voreingestellt ist: telnet '%F'
Beachte: bei allen oben genannten URL-Bearbeitern steht %F für den URL ohne den Protokollteil (mailto:, ftp://, ...), für diesen ist %U anzugeben !
pfm.Enter: pattern, modemask, notbefore, notafter, K|C, key|command
(Mehrere) "Entertaste-Bindungen". Diese Einträge, definieren jeweils eine Aktion (Menue-Aktion zu Tastendruck oder Shell-Befehl), die auf die Datei an der Cursor-Position angewandt werden soll, wenn die Eingabetaste gedrückt wird und die Datei bestimmten Kriterien genügt.


In pattern müssen ',', '\', Leerzeichen oder nicht-druckbare Zeichen (oder Ziffern, die auf solche folgen) als oktale Escape-Sequenzen kodiert werden: \ddd


modemask hat die Form der ls-Dateimodusanzeige. Abschließende Folgen von '?' können mit einem '*' abgekürzt werden.


Zeiten können in der Form yyyy mm|monthname dd hh:mm:ss oder als Sekunden seit The Epoch (1.1.1970 0:0) angegeben werden.


key ist entweder ein einzelnes druckbares Nicht-Leer-Zeichen oder eine Oktalzahl \ddd (mit mindestens zwei Ziffern).

Es gibt keine voreingestellten "Eingabetaste-Bindungen".

Beispiele:

pfm.Enter: , dr?x???????, 1970 Jan 1 01:00:00, 0x7fffffff, K, S
hier wendet die Eingabetaste einen S-Tastendruck, d.h. den Show- Befehl im Hauptmenue (der für Verzeichnisse wiederum chdir entspricht), auf das benutzer-lesbare und -durchsuchbare Verzeichnis an der Cursor position, das zuletzt zwischen Beginn von The Epoch und 2038 geändert wurde, an.
 
pfm.Enter: *.html, -r?????????, 0, 2030 12 31 23:59:00, C, lynx '%F'
hier ruft die Eingabetaste lynx für die benutzer-lesbare Datei an der Cursorposition mit Endung .html, die zuletzt zwischen Beginn von The Epoch und 31.12.2030 geändert wurde, auf.