2009-10-11 2 views
1

Я пишу приложение на основе терминала, но хочу, чтобы пользователь мог редактировать определенные текстовые данные в отдельном редакторе. Например, если пользователь хочет изменить список текущих имен пользователей, список должен быть открыт в виде текстового файла в любимом редакторе пользователя (vim, gedit и т. Д.). Вероятно, это переменная среды, такая как $ MYAPPEDITOR. Это похоже на то, как сообщения фиксации работают в svn.Как разрешить пользователю редактировать данные в отдельном приложении с терминала?

Это лучший способ сделать это, чтобы создать временный файл в/tmp и прочитать его, когда процесс редактора завершен? Или есть лучший способ подойти к этой проблеме?

ответ

2

Здесь уже есть переменная $EDITOR, что является чрезвычайно стандартным, и я видел, как он работает с широким спектром unixes. Также viвсегда вариант на любой вкус unix.

Debian имеет команду sensible-editor, которая вызывает $EDITOR, если она может, или возвращается к некоторым стандартным в противном случае. Freedesktop.org имеет команду xdg-open, которая будет определять, какая среда рабочего стола запущена, и открыть файл с соответствующим приложением. Насколько мне известно, sensible-editor не существует в других дистрибутивах, и, конечно же, xdg-open потерпит неудачу в текстовой среде, но не может помешать попробовать как можно больше вариантов, если вы считаете важным, чтобы рабочий стол пользователь может видеть свои счастливые блестящие gedit или kate вместо scary old vi или nano. ;)

Путь crontab и sudoedit Работа также делается путем создания файла в/tmp. git помещает его в .git, а svn фактически помещает его в текущий каталог (not/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). По моему мнению, они не являются полностью согласованными (или, по крайней мере, по умолчанию не являются). –

1

Способ svn и mercurial сделать это, создав файл в/tmp.

Кстати, вам не нужен MYAPPEDITOR, на nix есть EDITOR уже присутствующий.

0

Поскольку вы упоминаете в своем посте svn, почему бы не просто следовать той же методологии? svn открывает файл с определенным именем с любым $EDITOR (или $SVN_EDITOR) - это может потребовать некоторых действий с вашей стороны; определение параметров для каждого поддерживаемого редактора. В любом случае у вас есть имя файла, который был сохранен (или код ошибки приложения, если что-то не удалось), и вы можете просто использовать его.

Смежные вопросы