2009-10-11 45 views
1

我在写一个基于终端的应用程序,但我希望用户能够在单独的编辑器中编辑某些文本数据。例如,如果用户选择编辑当前用户名列表,则该列表应在用户最喜爱的编辑器(vim,gedit等)中以文本文件的形式打开。这可能是一个环境变量,如$ MYAPPEDITOR。这与提交消息在svn中的工作方式类似。如何允许用户在终端的单独应用程序中编辑数据?

是在/ tmp中创建临时文件并在编辑器进程终止时读取它的最佳方法吗?还是有更好的方法来解决这个问题?

回答

2

已经有一个$EDITOR变量,这是非常标准的,我已经看到它在各种unixes上工作。此外,vi总是任何unix的味道上的选项。

Debian有一个sensible-editor命令,如果可以的话调用$EDITOR,否则回退到一些标准的命令。 Freedesktop.org有一个xdg-open命令,它可以检测哪个桌面环境正在运行,并使用关联的应用程序打开该文件。据我所知,sensible-editor并不存在于其他发行版上,当然xdg-open将在纯文本环境中失败,但尝试尽可能多的选项并不会伤害,如果您认为重要的是桌面用户可以看到他们的快乐闪亮geditkate而不是可怕的旧vinano。 ;)

工作方式crontabsudoedit的工作也是通过在/ tmp中创建一个文件。 git将它放在.git下,而svn实际上将它放在当前目录中(而不是/ tmp)。

+2

还有$ VISUAL - 应该优于$ EDITOR(可能设置为'ed'而不是'vim')。雷蒙德的“Unix编程艺术”(http://www.catb.org/~esr/writings/taoup)对此进行了讨论; POSIX提到它们(http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html - 也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)。在我看来,这些并不完全一致(或者至少默认不是)。 – 2009-10-12 06:18:21

1

svn和mercurial的做法是通过在/ tmp中创建一个文件。

顺便说一句,你不需要一个MYAPPEDITOR,在nix上有EDITOR已经存在。

0

既然你在文章中提到svn,为什么不按照相同的方法? svn使用$EDITOR(或$SVN_EDITOR)包含的任何名称打开一个具有特定名称的文件 - 这实际上可能需要您做一些工作;确定每个支持的编辑器的参数。无论哪种情况,您都有保存的文件的名称(或者失败时应用程序的错误代码),您可以使用它。

相关问题