Как я могу написать стандартный вывод в 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"))