2009-10-11 6 views
1

J'écris une application basée sur un terminal, mais je veux que l'utilisateur puisse éditer certaines données de texte dans un éditeur séparé. Par exemple, si l'utilisateur choisit de modifier la liste des noms d'utilisateur actuels, la liste devrait s'ouvrir sous la forme d'un fichier texte dans l'éditeur favori de l'utilisateur (vim, gedit, etc.). Ce sera probablement une variable d'environnement telle que $ MYAPPEDITOR. Ceci est similaire à la façon dont les messages de commit fonctionnent dans svn.Comment autoriser un utilisateur à modifier des données dans une application distincte du terminal?

La meilleure façon de procéder est de créer un fichier temporaire dans/tmp et de le lire lorsque le processus d'édition est terminé? Ou y a-t-il une meilleure façon d'aborder ce problème?

Répondre

2

Il existe déjà une variable $EDITOR, qui est extrêmement standard et je l'ai vu fonctionner sur une grande variété d'unix. Aussi, vi est toujours une option sur n'importe quelle saveur d'unix.

Debian a une commande sensible-editor qui appelle $EDITOR si elle le peut, ou retombe à certains standard sinon. Freedesktop.org a une commande xdg-open qui va détecter quel environnement de bureau est en cours d'exécution et ouvrir le fichier avec l'application associée. Pour autant que je sache, sensible-editor n'existe pas sur les autres distributions, et bien sûr xdg-open échouera dans un environnement de texte seulement, mais il ne pourrait pas faire de mal d'essayer autant d'options que possible, si vous pensez qu'il est important qu'un bureau l'utilisateur peut voir leur heureux brillant gedit ou kate au lieu de vieux effrayant vi ou nano. ;)

La manière crontab et sudoedit fonctionne également en créant un fichier dans/tmp. git le met sous .git, et svn le met réellement dans le répertoire courant (pas/tmp).

+2

Il y a aussi $ VISUAL - qui devrait être préféré à $ EDITOR (qui peut être réglé sur 'ed' au lieu de 'vim'). L'Art de la programmation Unix de Raymond (http://www.catb.org/~esr/writings/taoup) en parle; POSIX les mentionne (http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html - également http://www.opengroup.org/onlinepubs/9699919799/utilities/mailx.html, http: // www .opengroup.org/onlinepubs/9699919799/utilities/more.html, http://www.opengroup.org/onlinepubs/9699919799/utilities/crontab.html). À mon avis, ceux-ci ne sont pas entièrement cohérents (ou, du moins, les défauts ne le sont pas). –

1

De la même façon que svn et mercurial le font en créant un fichier dans/tmp.

BTW, vous n'avez pas besoin d'un MYAPPEDITOR, sur nix il y a EDITOR déjà présent.

0

Depuis que vous avez mentionné svn dans votre publication, pourquoi ne pas suivre la même méthodologie? svn ouvre un fichier avec un nom particulier avec tout ce que $EDITOR (ou $SVN_EDITOR) contient - cela peut en fait nécessiter un travail de votre part; déterminer les paramètres pour chaque éditeur pris en charge. Dans les deux cas, vous avez le nom du fichier qui a été enregistré (ou le code d'erreur de l'application si quelque chose a échoué) et vous pouvez simplement l'utiliser.

Questions connexes