Function: eshell-lisp-command

eshell-lisp-command is a byte-compiled function defined in esh-cmd.el.gz.

Signature

(eshell-lisp-command OBJECT &optional ARGS)

Documentation

Insert Lisp OBJECT, using ARGS if a function.

Aliases

eshell-lisp-command* (obsolete since 31.1)

Source Code

;; Defined in /usr/src/emacs/lisp/eshell/esh-cmd.el.gz
(defvar eshell-last-output-end)         ;Defined in esh-mode.el.

(defun eshell-lisp-command (object &optional args)
  "Insert Lisp OBJECT, using ARGS if a function."
  (unless eshell-allow-commands
    (signal 'eshell-commands-forbidden '(lisp)))
  (catch 'eshell-external               ; deferred to an external command
    (when (memq eshell-in-pipeline-p '(nil last))
      (eshell-set-exit-info 0))
    (setq eshell-last-arguments args)
    (let* ((eshell-ensure-newline-p t)
           (command-form-p (functionp object))
           result)
      (if command-form-p
          (let ((numeric (not (get object 'eshell-no-numeric-conversions)))
                (fname-args (get object 'eshell-filename-arguments)))
            (when (or numeric fname-args)
              (while args
                (let ((arg (car args)))
                  (cond
                   ((and numeric (eshell--numeric-string-p arg))
                    ;; If any of the arguments are flagged as numbers
                    ;; waiting for conversion, convert them now.
                    (setcar args (string-to-number arg)))
                   ((and fname-args (stringp arg)
                         (string-equal arg "~"))
                    ;; If any of the arguments match "~", prepend "./"
                    ;; to treat it as a regular file name.
                    (setcar args (concat "./" arg)))))
                (setq args (cdr args))))
            (setq eshell-last-command-name
                  (concat "#<function " (symbol-name object) ">")))
        (setq eshell-last-command-name "#<Lisp object>"))
      (setq result (eshell-exec-lisp
                    #'eshell-print-maybe-n #'eshell-error-maybe-n
                    object eshell-last-arguments (not command-form-p)))
      (when (memq eshell-in-pipeline-p '(nil last))
        (eshell-set-exit-info
         ;; If `eshell-lisp-form-nil-is-failure' is non-nil, Lisp forms
         ;; that succeeded but have a nil result should have an exit
         ;; status of 2.
         (when (and eshell-lisp-form-nil-is-failure
                    (not command-form-p)
                    (= eshell-last-command-status 0)
                    (not result))
           2)
         result))
      nil)))