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.
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:
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.
Ü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 |
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 ;-)
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:
Es gibt keine voreingestellten "Eingabetaste-Bindungen".
Beispiele: