Ответ 1
Похоже, вы хотите princ
вместо print
. Итак, в основном:
(princ "Hello world! I'm writing to STDOUT but I'm not in quotes!")
Однако одно предостережение состоит в том, что princ
не завершает вывод автоматически с помощью \n
.
Я хотел бы написать несколько сценариев Unix в Emacs Lisp. Однако, кажется, нет чистого способа записи в STDOUT, поэтому я могу перенаправить результаты в файл или передать вывод другой команде. Функция print помещает двойные кавычки вокруг выходных строк, поэтому я получаю "Привет мир!" вместо Hello world!.
Здесь emacs script.
#!/usr/bin/emacs --script ;; ;; Run me from a Unix shell: ./hello.el > x.txt ;; (message "Hello world! I'm writing to STDERR.") (print "Hello world! I'm writing to STDOUT but I'm in quotes") (insert "Hello world! I'm writing to an Emacs buffer") (write-file "y.txt")
И вот как бы я хотел это назвать.
hello.el > x.txt hello.el | wc
Похоже, вы хотите princ
вместо print
. Итак, в основном:
(princ "Hello world! I'm writing to STDOUT but I'm not in quotes!")
Однако одно предостережение состоит в том, что princ
не завершает вывод автоматически с помощью \n
.
Как говорит Дэвид Антарамян, вы, вероятно, хотите princ
.
Кроме того, message
поддерживает строку управления форматом (сродни printf
в C), которая адаптирована из format
. Таким образом, вы, возможно, в конце концов захотите сделать что-то вроде
(princ (format "Hello, %s!\n" "World"))
Как пара функций плюс демонстрация:
(defun fmt-stdout (&rest args)
(princ (apply 'format args)))
(defun fmtln-stdout (&rest args)
(princ (apply 'format
(if (and args (stringp (car args)))
(cons (concat (car args) "\n") (cdr args))
args))))
(defun test-fmt ()
(message "Hello, %s!" "message to stderr")
(fmt-stdout "Hello, %s!\n" "fmt-stdout, explict newline")
(fmtln-stdout "Hello, %s!" "fmtln-stdout, implicit newline"))