Как я могу написать стандартный вывод в Emacs
Я пытаюсь отладить производительность программы Emacs. В частности, я испытываю чрезвычайно длительное время запуска (~ 5 'по сравнению с ~ 1' для голых Emacs) на удаленном соединении через WLAN, сотовый телефон и т.д. В этом контексте любая запись message
не помогает, для отображения не обновляется вообще.
Что я хотел бы сделать, так это написать на "стандартный вывод" процесса Linux. Я знаю режим --batch
, но это не помогает мне, потому что я хочу использовать Emacs в интерактивном режиме.
Итак, как я могу писать сообщения на выходе Linux-стандарта (в отличие от стандартного вывода Emacs)?
Ответы
Ответ 1
Вы можете вывести стандартную ошибку следующим образом:
(print "hello world" #'external-debugging-output)
или
(princ "hello world" #'external-debugging-output)
Это может быть буфером, поэтому будьте осторожны. В настоящее время невозможно выводить на стандарт. Я собираюсь добавить это, я думаю!
Ответ 2
Запустите emacs в качестве демона (emacs --daemon
), и любые сообщения во время последовательности запуска будут отправлены на stdout или stderr, как описано lunaryorn.
Подключитесь к серверу с помощью emacsclient
Самый простой способ убить сервер: M-x kill-emacs
RET
Подробнее см. C-h i g (emacs) Emacs Server
RET
Ответ 3
Работает для меня в centos 6.8 (GNU Emacs 23.1.1):
(append-to-file "here I come to save the day\n" nil "/dev/stdout")
Попробуйте также использовать "/dev/tty" вместо "/dev/stdout":
Непонятно, если вы намерены перенаправить "emacs -nw" stdout в файл и контролировать этот файл извне (затем используйте "/dev/stdout" ); или в порядке с записью на "/dev/tty", таким образом, загрязняя те же самые тети основного экрана "emacs -nw".
Если вы запускаете графическую версию emacs, таким образом, она может потерять привязку к исходному tty, может злоупотреблять переменными окружения для передачи исходной оболочки tty в elisp.
Это работает для меня с помощью Aquamacs в Mac OS X. Запуск из оболочки bash:
$ MY_TTY=$(tty) open /Applications/Aquamacs\ Emacs.app &
затем в emacs:
(append-to-file "here I come to save the day\n" nil (getenv "MY_TTY"))