Запустить программу elisp без Emacs?

elisp - хороший язык, я считаю, что он может выполнять все виды работ, но могу ли я использовать его как скрипт оболочки?

т.е. выполнить некоторые *.el файлы из консоли, не запуская Emacs. Или запустите Emacs, но не переходите в интерактивный режим.

1 ответ

Решение

Скорее всего, вы можете запускать сценарии elisp в Emacs без запуска интерфейса редактора.

Вот заметки, которые я сделал / скопировал из нескольких чрезвычайно полезных вопросов и ответов по этому вопросу здесь, в SO (и в двух следующих, в частности).

;;;; Elisp executable scripts

;; --batch vs --script
;; M-: (info "(emacs) Initial Options") RET
;; M-: (info "(elisp) Batch Mode") RET

;; Passing additional command-line arguments to Emacs:
;; https://stackru.com/questions/6238331/#6259330
;;
;; For robustness, it's important to both pass '--' as an argument
;; (to prevent Emacs from trying to process option arguments intended
;; for the script), and also set "argv" to nil at the end of the script
;; (to prevent Emacs from visiting the non-option arguments as files).
;;
;; #!/bin/sh
;; ":"; exec emacs --no-site-file --script "$0" -- "$@" # -*-emacs-lisp-*-
;; (print (+ 2 2))
;; (setq argv nil) ;; always end with this

;; Processing with STDIN and STDOUT via --script:
;; https://stackru.com/questions/2879746/#2906967
;;
;; #!/usr/local/bin/emacs --script
;; ;;-*- mode: emacs-lisp;-*-
;;
;; (defun process (string)
;;   "just reverse the string"
;;   (concat (nreverse (string-to-list string))))
;;
;; (condition-case nil
;;     (let (line)
;;       ;; commented out b/c not relevant for `cat`, but potentially useful
;;       ;; (princ "argv is ")
;;       ;; (princ argv)
;;       ;; (princ "\n")
;;       ;; (princ "command-line-args is" )
;;       ;; (princ command-line-args)
;;       ;; (princ "\n")
;;
;;       (while (setq line (read-from-minibuffer ""))
;;         (princ (process line))
;;         (princ "\n")))
;;   (error nil))

Помимо Emacs, единственный другой интерпретатор / компилятор elisp, о котором я знаю, это Guile. Если вы увлекаетесь общим кодированием в elisp, на это стоит обратить внимание (особенно если речь идет о производительности).

Другие вопросы по тегам