startwert für readline
-
hallo alle zusammen,
ich benutze die readline-bibliothek, um vom benutzer meines programmes eingaben zu erhalten. nun soll allerdings schon eine vorgabe in der eingabezeile stehen:
bitte irgendetwas eingeben: foo
der user soll dieses foo editieren können. wie bringe ich es der readline-funktion das bei, dass dieses foo schon in der eingabezeile stehen soll?
-
Reicht Dir nicht einfach eine Default-Eingabe, etwa in der Art:
bitte Ziel-Directory eingeben [/home/charly]: foo
Geht extrem simple, und reicht in vielen Fällen aus.
Ich geb ja zu, ein editierbare Eingabezeile ist schöner (aber auch wesentlich komplexer).
-
das geht in dem fall nicht, denn es handelt sich um ein programm, das playlisten nach fehlerhaften einträgen durchsucht. da ist es ganz praktisch, wenn der fehlerhafte eintrag schon drin steht, falls sich beispielsweise nur das verzeichnis einer datei geändert hat...
-
du könntest ja die fehlerhaften einträge in ner datei speichern und dann nen editor starten mit dem der user diese dann bearbeiten kann. Nach dem abspeichern übernimmst du einfach die korrigierten daten aus der datei.
-
ss schrieb:
du könntest ja die fehlerhaften einträge in ner datei speichern und dann nen editor starten mit dem der user diese dann bearbeiten kann. Nach dem abspeichern übernimmst du einfach die korrigierten daten aus der datei.
Genau.
Solche Shellouts sind für derartige Anwendungszwecke bestens geeignet, ich hätte genau das gleiche vorgeschlagen. Einfach eine temporäre Datei anlegen und dann den User in $EDITOR bearbeiten lassen.
-
nman schrieb:
Solche Shellouts sind für derartige Anwendungszwecke bestens geeignet, ich hätte genau das gleiche vorgeschlagen. Einfach eine temporäre Datei anlegen und dann den User in $EDITOR bearbeiten lassen.
würde auch gehen, aber die tab-taste in readline ist halt auch ganz praktisch...
wie auch immer, jedenfalls habe ich eine lösung gefunden:
#include <stdio.h> #include <stdlib.h> #include <readline/readline.h> char *startstr = NULL; int readline_init(void) { if(startstr) rl_replace_line(startstr, 0); return 0; } int main(void) { char *buf; rl_startup_hook = readline_init; startstr = "foo"; buf = readline("Please enter something: "); if(buf) { printf("You entered \"%s\"\n", buf); free(buf); } startstr = "bar"; buf = readline("Please enter something: "); if(buf) { printf("You entered \"%s\"\n", buf); free(buf); } return 0; }
die globale variable ist zwar etwas hässlich, aber anders geht es halt nicht...