2009-10-11 46 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)包含的任何名稱打開一個具有特定名稱的文件 - 這實際上可能需要您做一些工作;確定每個支持的編輯器的參數。無論哪種情況,您都有保存的文件的名稱(或者失敗時應用程序的錯誤代碼),您可以使用它。

相關問題