Я хотел бы записать несколько сценариев Unix в Lisp Emacs. Однако, кажется, нет очевидного способа для записи в STDOUT, таким образом, я могу перенаправить результаты в файл или передать вывод по каналу к другой команде. Функция печати помещает двойные кавычки вокруг выходных строк, таким образом, я получаю "Привет мир!" вместо Привет мира!.
Вот emacs сценарий.
#!/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
Похоже, вы хотите Pink
вместо Print
. Итак, в принципе:
(Pincy "Hello World! Я пишу на STDOUT, но я не в цитатах!»)
Однако одна оговорка состоит в том, что Prink
не ограничивается автоматически Выход с \ N
.
Как говорит Дэвид Антараман, вы, вероятно, хотите Pink
.
Также Сообщение
поддерживает строку управления форматом (сродни на printf
в C), которая адаптирована из формата
. Итак, вы можете в конечном итоге хотеть сделать что-то вроде
(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"))