Как я могу написать стандартный вывод в Emacs

Я пытаюсь отладить производительность программы Emacs. В частности, я страдаю чрезвычайно длительным временем запуска (~5 'по сравнению с ~1' для голого Emacs)на удаленном подключении через WLAN, мобильный телефон и т. д. В этом контексте любой message written не помогает, так как дисплей не обновляется вообще.

то, что я хотел бы сделать, это записать на "стандартный вывод" процесса Linux. Я знаю --batch режим, но это не помогает мне, потому что я хочу использовать Emacs интерактивно.

Итак, как я могу писать сообщения на стандартный вывод Linux (в отличие от стандартного вывода Emacs)?

3 ответов


вы можете вывести стандартную ошибку следующим образом:

(print "hello world" #'external-debugging-output)

или

(princ "hello world" #'external-debugging-output)

Это может буферизировать, поэтому будьте осторожны.На данный момент невозможно вывести на стандартную мощность. Я собираюсь добавить это, я думаю!


запустите emacs как демон (emacs --daemon) и любые сообщения во время последовательности запуска будут отправлены в stdout или stderr, как описано lunaryorn.

подключение к серверу с помощью emacsclient

самый простой способ убить сервер M-x kill-emacs RET

Подробнее см. C-hЯg (emacs) Emacs Server RET


работает для меня в 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", таким образом загрязняя тот же самый tty основного дисплея "emacs-nw".

при запуске GUI-версии 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"))