X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/1bad168e59601c1c843a38b2962e77b29f497f11..ea6c930a8dd83a4e7d7a640c02e8a791458178c0:/lisp/eshell/esh-cmd.el diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index c8fe7f1ced..2e47fd718c 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1,16 +1,16 @@ ;;; esh-cmd.el --- command invocation -;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +;; 2008 Free Software Foundation, Inc. ;; Author: John Wiegley ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -18,9 +18,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -111,6 +109,7 @@ (require 'esh-ext) (eval-when-compile + (require 'cl) (require 'pcomplete)) @@ -399,8 +398,7 @@ hooks should be run before and after the command." "Output a debugging message to '*eshell last cmd*'." (let ((buf (get-buffer-create "*eshell last cmd*")) (text (eshell-stringify eshell-current-command))) - (save-excursion - (set-buffer buf) + (with-current-buffer buf (if (not tag) (erase-buffer) (insert "\n\C-l\n" tag "\n\n" text @@ -479,9 +477,8 @@ hooks should be run before and after the command." "Execute named command" (eshell-command-result-p "+ 1 2" "3\n")) -(eval-when-compile - (defvar eshell-command-body) - (defvar eshell-test-body)) +(defvar eshell-command-body) +(defvar eshell-test-body) (defsubst eshell-invokify-arg (arg &optional share-output silent) "Change ARG so it can be invoked from a structured command. @@ -842,7 +839,11 @@ this grossness will be made to disappear by using `call/cc'..." (setcar head (intern-soft (concat (symbol-name (car head)) "*")))))) - ,(car pipeline))))) + ;; Indicate to the command if it is the last in the pipeline. + ;; Currently only used by eshell-ls-files. + ;; Perhaps nil, rather than 'last, would be OK? + (let ((eshell-in-pipeline-p ,(if (cdr pipeline) t (quote 'last)))) + ,(car pipeline)))))) (defmacro eshell-do-pipelines-synchronously (pipeline) "Execute the commands in PIPELINE in sequence synchronously. @@ -1000,11 +1001,9 @@ at the moment are: (list 'eshell-do-eval (list 'quote command))))) (and eshell-debug-command - (save-excursion - (let ((buf (get-buffer-create "*eshell last cmd*"))) - (set-buffer buf) - (erase-buffer) - (insert "command: \"" input "\"\n")))) + (with-current-buffer (get-buffer-create "*eshell last cmd*") + (erase-buffer) + (insert "command: \"" input "\"\n"))) (setq eshell-current-command command) (let ((delim (catch 'eshell-incomplete (eshell-resume-eval)))) @@ -1044,7 +1043,9 @@ at the moment are: (defmacro eshell-manipulate (tag &rest commands) "Manipulate a COMMAND form, with TAG as a debug identifier." - (if (not eshell-debug-command) + ;; Check `bound'ness since at compile time the code until here has not + ;; executed yet. + (if (not (and (boundp 'eshell-debug-command) eshell-debug-command)) `(progn ,@commands) `(progn (eshell-debug-command ,(eval tag) form) @@ -1256,9 +1257,12 @@ be finished later after the completion of an asynchronous subprocess." (prog1 (describe-function sym) (message nil)))))) - (setq desc (substring desc 0 - (1- (or (string-match "\n" desc) - (length desc))))) + (setq desc (if desc (substring desc 0 + (1- (or (string-match "\n" desc) + (length desc)))) + ;; This should not happen. + (format "%s is defined, \ +but no documentation was found" name))) (if (buffer-live-p (get-buffer "*Help*")) (kill-buffer "*Help*")) (setq program (or desc name)))))) @@ -1421,5 +1425,5 @@ messages, and errors." (provide 'esh-cmd) -;;; arch-tag: 8e4f3867-a0c5-441f-96ba-ddd142d94366 +;; arch-tag: 8e4f3867-a0c5-441f-96ba-ddd142d94366 ;;; esh-cmd.el ends here