]> git.eshelyaron.com Git - emacs.git/commitdiff
Default all eshell hooks to nil (bug#5375)
authorGlenn Morris <rgm@gnu.org>
Sat, 5 Mar 2011 04:11:05 +0000 (20:11 -0800)
committerGlenn Morris <rgm@gnu.org>
Sat, 5 Mar 2011 04:11:05 +0000 (20:11 -0800)
* eshell/esh-mode.el (eshell-kill-buffer-function): New function.
(eshell-mode): Use eshell-kill-buffer-function.
Run the -initialize functions independently of the -load-hooks.
* eshell/esh-proc.el (eshell-kill-process-function): New function.
(eshell-gather-process-output, eshell-sentinel)
(eshell-interrupt-process, eshell-kill-process, eshell-quit-process):
Use eshell-kill-process-function.
* eshell/em-alias.el (eshell-alias-load-hook):
* eshell/em-banner.el (eshell-banner-load-hook):
* eshell/em-cmpl.el (eshell-cmpl-load-hook):
* eshell/em-dirs.el (eshell-dirs-load-hook):
* eshell/em-glob.el (eshell-glob-load-hook):
* eshell/em-hist.el (eshell-hist-load-hook):
* eshell/em-pred.el (eshell-pred-load-hook):
* eshell/em-prompt.el (eshell-prompt-load-hook):
* eshell/em-rebind.el (eshell-rebind-load-hook):
* eshell/em-script.el (eshell-script-load-hook):
* eshell/em-smart.el (eshell-smart-load-hook):
* eshell/em-term.el (eshell-term-load-hook):
* eshell/em-unix.el (eshell-unix-load-hook):
* eshell/esh-arg.el (eshell-arg-load-hook):
* eshell/esh-cmd.el (eshell-cmd-load-hook):
* eshell/esh-ext.el (eshell-ext-load-hook):
* eshell/esh-io.el (eshell-io-load-hook):
* eshell/esh-mode.el (eshell-exit-hook):
* eshell/esh-proc.el (eshell-proc-load-hook, eshell-kill-hook):
* eshell/esh-var.el (eshell-var-load-hook):
Set default hook values to nil.  (Bug#5375)

21 files changed:
lisp/ChangeLog
lisp/eshell/em-alias.el
lisp/eshell/em-banner.el
lisp/eshell/em-cmpl.el
lisp/eshell/em-dirs.el
lisp/eshell/em-glob.el
lisp/eshell/em-hist.el
lisp/eshell/em-pred.el
lisp/eshell/em-prompt.el
lisp/eshell/em-rebind.el
lisp/eshell/em-script.el
lisp/eshell/em-smart.el
lisp/eshell/em-term.el
lisp/eshell/em-unix.el
lisp/eshell/esh-arg.el
lisp/eshell/esh-cmd.el
lisp/eshell/esh-ext.el
lisp/eshell/esh-io.el
lisp/eshell/esh-mode.el
lisp/eshell/esh-proc.el
lisp/eshell/esh-var.el

index b0f1a280ae1009847ead0d341eb10a87b71629b5..aeb7c8edff49280a1c2b2add5b2211b95df329a1 100644 (file)
@@ -1,5 +1,34 @@
 2011-03-05  Glenn Morris  <rgm@gnu.org>
 
+       * eshell/esh-mode.el (eshell-kill-buffer-function): New function.
+       (eshell-mode): Use eshell-kill-buffer-function.
+       Run the -initialize functions independently of the -load-hooks.
+       * eshell/esh-proc.el (eshell-kill-process-function): New function.
+       (eshell-gather-process-output, eshell-sentinel)
+       (eshell-interrupt-process, eshell-kill-process, eshell-quit-process):
+       Use eshell-kill-process-function.
+       * eshell/em-alias.el (eshell-alias-load-hook):
+       * eshell/em-banner.el (eshell-banner-load-hook):
+       * eshell/em-cmpl.el (eshell-cmpl-load-hook):
+       * eshell/em-dirs.el (eshell-dirs-load-hook):
+       * eshell/em-glob.el (eshell-glob-load-hook):
+       * eshell/em-hist.el (eshell-hist-load-hook):
+       * eshell/em-pred.el (eshell-pred-load-hook):
+       * eshell/em-prompt.el (eshell-prompt-load-hook):
+       * eshell/em-rebind.el (eshell-rebind-load-hook):
+       * eshell/em-script.el (eshell-script-load-hook):
+       * eshell/em-smart.el (eshell-smart-load-hook):
+       * eshell/em-term.el (eshell-term-load-hook):
+       * eshell/em-unix.el (eshell-unix-load-hook):
+       * eshell/esh-arg.el (eshell-arg-load-hook):
+       * eshell/esh-cmd.el (eshell-cmd-load-hook):
+       * eshell/esh-ext.el (eshell-ext-load-hook):
+       * eshell/esh-io.el (eshell-io-load-hook):
+       * eshell/esh-mode.el (eshell-exit-hook):
+       * eshell/esh-proc.el (eshell-proc-load-hook, eshell-kill-hook):
+       * eshell/esh-var.el (eshell-var-load-hook):
+       Set default hook values to nil.  (Bug#5375)
+
        * eshell/esh-module.el (eshell-module-unload-hook)
        (eshell-modules-list): Remove leading * from defcustom docs.
 
index 9efa95fc9ab6a2f60903261852e40a6c8843eccb..4e1dbd410454bbadd5d8e9254fcb864e0d6159cd 100644 (file)
@@ -117,8 +117,9 @@ gained by using this module."
   ;; :link '(custom-manual "(eshell)Auto-correction of bad commands")
   :group 'eshell-alias)
 
-(defcustom eshell-alias-load-hook '(eshell-alias-initialize)
+(defcustom eshell-alias-load-hook nil
   "A hook that gets run when `eshell-alias' is loaded."
+  :version "24.1"                      ; removed eshell-alias-initialize
   :type 'hook
   :group 'eshell-alias)
 
index b2ebde98cee71460fd5ba544283b4ae262f1eb9f..c3e5a8b3d5578de12b0cce80801366a522bd64ae 100644 (file)
@@ -64,8 +64,9 @@ This can be any sexp, and should end with at least two newlines."
 
 (put 'eshell-banner-message 'risky-local-variable t)
 
-(defcustom eshell-banner-load-hook '(eshell-banner-initialize)
+(defcustom eshell-banner-load-hook nil
   "A list of functions to run when `eshell-banner' is loaded."
+  :version "24.1"                       ; removed eshell-banner-initialize
   :type 'hook
   :group 'eshell-banner)
 
index f3f104c1ede6f498f30b795d476bcfe238ea4ce4..c551684210cd5fa5c10c8022d9c93b7dc116e74d 100644 (file)
@@ -84,8 +84,9 @@ variable names, arguments, etc."
 
 ;;; User Variables:
 
-(defcustom eshell-cmpl-load-hook '(eshell-cmpl-initialize)
+(defcustom eshell-cmpl-load-hook nil
   "A list of functions to run when `eshell-cmpl' is loaded."
+  :version "24.1"                      ; removed eshell-cmpl-initialize
   :type 'hook
   :group 'eshell-cmpl)
 
index 9165f69d0b189efb33fbd548bd70efc5dc596c12..1aa2c34c395e13bce5dff6811a362db829984634 100644 (file)
@@ -58,8 +58,9 @@ they lack somewhat in feel from the typical shell equivalents."
 
 ;;; User Variables:
 
-(defcustom eshell-dirs-load-hook '(eshell-dirs-initialize)
+(defcustom eshell-dirs-load-hook nil
   "A hook that gets run when `eshell-dirs' is loaded."
+  :version "24.1"                      ; removed eshell-dirs-initialize
   :type 'hook
   :group 'eshell-dirs)
 
index 2a565c5c827a124602f9d12a799b9cd8fa91c5a1..732c6c05bfead62c2e3e6821df8c24efeff18ec2 100644 (file)
@@ -61,8 +61,9 @@ by zsh for filename generation."
 
 ;;; User Variables:
 
-(defcustom eshell-glob-load-hook '(eshell-glob-initialize)
+(defcustom eshell-glob-load-hook nil
   "A list of functions to run when `eshell-glob' is loaded."
+  :version "24.1"                      ; removed eshell-glob-initialize
   :type 'hook
   :group 'eshell-glob)
 
index f9ddf3b679f69a04fad49a3b63e717a4481606f2..993e9d63a94a8b7cd30178ce349819bfb652ac98 100644 (file)
@@ -70,8 +70,9 @@
 
 ;;; User Variables:
 
-(defcustom eshell-hist-load-hook '(eshell-hist-initialize)
+(defcustom eshell-hist-load-hook nil
   "A list of functions to call when loading `eshell-hist'."
+  :version "24.1"                      ; removed eshell-hist-initialize
   :type 'hook
   :group 'eshell-hist)
 
index 33085c067fdf216c14e456cb4f7e7884215ad079..f3027ea9b5e9f5bfbd0947c2e6e6426483245b3c 100644 (file)
@@ -59,8 +59,9 @@ ordinary strings."
 
 ;;; User Variables:
 
-(defcustom eshell-pred-load-hook '(eshell-pred-initialize)
+(defcustom eshell-pred-load-hook nil
   "A list of functions to run when `eshell-pred' is loaded."
+  :version "24.1"                      ; removed eshell-pred-initialize
   :type 'hook
   :group 'eshell-pred)
 
index 448d2cdf3030810a234a84cd405a9ae797507d2d..3e87acc6d1ebcf94cba8b948eb3cb3edc064b6ce 100644 (file)
@@ -37,8 +37,9 @@ as is common with most shells."
 
 ;;; User Variables:
 
-(defcustom eshell-prompt-load-hook '(eshell-prompt-initialize)
+(defcustom eshell-prompt-load-hook nil
   "A list of functions to call when loading `eshell-prompt'."
+  :version "24.1"                      ; removed eshell-prompt-initialize
   :type 'hook
   :group 'eshell-prompt)
 
index 6def23e1b71e895c9615f94b62b66ccdf7162601..2c346dfcd3da31035473f734409cc654586cf70d 100644 (file)
@@ -41,8 +41,9 @@ the behavior of normal shells while the user editing new input text."
 
 ;;; User Variables:
 
-(defcustom eshell-rebind-load-hook '(eshell-rebind-initialize)
+(defcustom eshell-rebind-load-hook nil
   "A list of functions to call when loading `eshell-rebind'."
+  :version "24.1"                      ; removed eshell-rebind-initialize
   :type 'hook
   :group 'eshell-rebind)
 
index ed4ad1c0712d3b4d8146166ee305a364d31a930d..d76e19cdd07127cf8dcaad2cb14137488ccf39e5 100644 (file)
@@ -34,8 +34,9 @@ commands, as a script file."
 
 ;;; User Variables:
 
-(defcustom eshell-script-load-hook '(eshell-script-initialize)
+(defcustom eshell-script-load-hook nil
   "A list of functions to call when loading `eshell-script'."
+  :version "24.1"                       ; removed eshell-script-initialize
   :type 'hook
   :group 'eshell-script)
 
index 2c54930e4395f9de7152fd1e9142e33432bdd23d..f08fec8f8fa8b35c447cce61d054a6cb4f308aa8 100644 (file)
@@ -84,8 +84,9 @@ it to get a real sense of how it works."
 
 ;;; User Variables:
 
-(defcustom eshell-smart-load-hook '(eshell-smart-initialize)
+(defcustom eshell-smart-load-hook nil
   "A list of functions to call when loading `eshell-smart'."
+  :version "24.1"                      ; removed eshell-smart-initialize
   :type 'hook
   :group 'eshell-smart)
 
index be394ba5b22f2be06fa3bd5ac16d54fd6c7d5377..7d5fbbeabeb26d7cc09852bc3b714ee5592c702f 100644 (file)
@@ -46,8 +46,9 @@ which commands are considered visual in nature."
 
 ;;; User Variables:
 
-(defcustom eshell-term-load-hook '(eshell-term-initialize)
+(defcustom eshell-term-load-hook nil
   "A list of functions to call when loading `eshell-term'."
+  :version "24.1"                      ; removed eshell-term-initialize
   :type 'hook
   :group 'eshell-term)
 
index 3bb623c4c4e5a3a2206eb214887c8ca4d8611d1c..707f2ebc2ced0652c2840b535cf2ea6a3e6bf682 100644 (file)
@@ -53,8 +53,9 @@ by name)."
   :tag "UNIX commands in Lisp"
   :group 'eshell-module)
 
-(defcustom eshell-unix-load-hook '(eshell-unix-initialize)
+(defcustom eshell-unix-load-hook nil
   "A list of functions to run when `eshell-unix' is loaded."
+  :version "24.1"                      ; removed eshell-unix-initialize
   :type 'hook
   :group 'eshell-unix)
 
index f42440ae4ec73982a0ffcfe1a9df63b1a755caaf..1fb8b7f4c3245d57c463998c5bab1e89a2046d1b 100644 (file)
@@ -117,8 +117,9 @@ treated as a literal character."
 
 ;;; User Variables:
 
-(defcustom eshell-arg-load-hook '(eshell-arg-initialize)
+(defcustom eshell-arg-load-hook nil
   "A hook that gets run when `eshell-arg' is loaded."
+  :version "24.1"                     ; removed eshell-arg-initialize
   :type 'hook
   :group 'eshell-arg)
 
index 0a00300d19cab8ca91fb4a060857c3faf84ef39d..62c14f38025f052b936651ffa890cf808a9538dd 100644 (file)
@@ -229,8 +229,9 @@ return non-nil if the command is complex."
 
 ;;; User Variables:
 
-(defcustom eshell-cmd-load-hook '(eshell-cmd-initialize)
+(defcustom eshell-cmd-load-hook nil
   "A hook that gets run when `eshell-cmd' is loaded."
+  :version "24.1"                     ; removed eshell-cmd-initialize
   :type 'hook
   :group 'eshell-cmd)
 
index ebd20b90dd6858659978f4d0744b23507d91911c..3acbeac0b891d3d85de6e4cb71e026bf1e9f157f 100644 (file)
@@ -46,8 +46,9 @@ loaded into memory, thus beginning a new process."
 
 ;;; User Variables:
 
-(defcustom eshell-ext-load-hook '(eshell-ext-initialize)
+(defcustom eshell-ext-load-hook nil
   "A hook that gets run when `eshell-ext' is loaded."
+  :version "24.1"                      ; removed eshell-ext-initialize
   :type 'hook
   :group 'eshell-ext)
 
index ef8966f1d7d16dff01d3fcfcb7260badd70ee6f5..71fae34b360fd4a8dcf15c93e079c54854a11cb5 100644 (file)
@@ -71,8 +71,9 @@ though they were files."
 
 ;;; User Variables:
 
-(defcustom eshell-io-load-hook '(eshell-io-initialize)
+(defcustom eshell-io-load-hook nil
   "A hook that gets run when `eshell-io' is loaded."
+  :version "24.1"                      ; removed eshell-io-initialize
   :type 'hook
   :group 'eshell-io)
 
index 3b566ead0e5e91e9c69c08499fa841716e6af166..f7c727aa36fed9c87a0189f14c84d00114264b4e 100644 (file)
@@ -89,9 +89,10 @@ That is to say, the first time during an Emacs session."
   :type 'hook
   :group 'eshell-mode)
 
-(defcustom eshell-exit-hook '(eshell-query-kill-processes)
+(defcustom eshell-exit-hook nil
   "A hook that is run whenever `eshell' is exited.
 This hook is only run if exiting actually kills the buffer."
+  :version "24.1"                       ; removed eshell-query-kill-processes
   :type 'hook
   :group 'eshell-mode)
 
@@ -287,6 +288,17 @@ This is used by `eshell-watch-for-password-prompt'."
 
 ;;; User Functions:
 
+(defun eshell-kill-buffer-function ()
+  "Function added to `kill-buffer-hook' in Eshell buffers.
+This runs the function `eshell-kill-processes-on-exit',
+and the hook `eshell-exit-hook'."
+  ;; It's fine to run this unconditionally since it can be customized
+  ;; via the `eshell-kill-processes-on-exit' variable.
+  (and (fboundp 'eshell-query-kill-processes)
+       (not (memq 'eshell-query-kill-processes eshell-exit-hook))
+       (eshell-query-kill-processes))
+  (run-hooks 'eshell-exit-hook))
+
 ;;;###autoload
 (defun eshell-mode ()
   "Emacs shell interactive mode.
@@ -403,17 +415,15 @@ This is used by `eshell-watch-for-password-prompt'."
   (unless (file-exists-p eshell-directory-name)
     (eshell-make-private-directory eshell-directory-name t))
 
-  ;; load core Eshell modules for this session
-  (dolist (module (eshell-subgroups 'eshell))
-    (run-hooks (intern-soft (concat (symbol-name module)
-                                   "-load-hook"))))
-
-  ;; load extension modules for this session
-  (dolist (module eshell-modules-list)
-    (let ((load-hook (intern-soft (concat (symbol-name module)
-                                         "-load-hook"))))
-      (if (and load-hook (boundp load-hook))
-         (run-hooks load-hook))))
+  ;; Load core Eshell modules, then extension modules, for this session.
+  (dolist (module (append (eshell-subgroups 'eshell) eshell-modules-list))
+    (let ((load-hook (intern-soft (format "%s-load-hook" module)))
+          (initfunc (intern-soft (format "%s-initialize" module))))
+      (when (and load-hook (boundp load-hook))
+        (if (memq initfunc (symbol-value load-hook)) (setq initfunc nil))
+        (run-hooks load-hook))
+      ;; So we don't need the -initialize functions on the hooks (b#5375).
+      (and initfunc (fboundp initfunc) (funcall initfunc))))
 
   (if eshell-send-direct-to-subprocesses
       (add-hook 'pre-command-hook 'eshell-intercept-commands t t))
@@ -428,10 +438,7 @@ This is used by `eshell-watch-for-password-prompt'."
     (add-hook 'eshell-pre-command-hook 'eshell-command-started nil t)
     (add-hook 'eshell-post-command-hook 'eshell-command-finished nil t))
 
-  (add-hook 'kill-buffer-hook
-           (function
-            (lambda ()
-              (run-hooks 'eshell-exit-hook))) t t)
+  (add-hook 'kill-buffer-hook 'eshell-kill-buffer-function t t)
 
   (if eshell-first-time-p
       (run-hooks 'eshell-first-time-mode-hook))
index 8757f5d56a0b5bcdd5947b659fcf74bb06b8a4a7..f3fcc52aac84dfe433700825c83801ff314d538e 100644 (file)
@@ -38,8 +38,9 @@ finish."
 
 ;;; User Variables:
 
-(defcustom eshell-proc-load-hook '(eshell-proc-initialize)
+(defcustom eshell-proc-load-hook nil
   "A hook that gets run when `eshell-proc' is loaded."
+  :version "24.1"                      ; removed eshell-proc-initialize
   :type 'hook
   :group 'eshell-proc)
 
@@ -94,13 +95,14 @@ is created."
   :type 'hook
   :group 'eshell-proc)
 
-(defcustom eshell-kill-hook '(eshell-reset-after-proc)
+(defcustom eshell-kill-hook nil
   "Called when a process run by `eshell-gather-process-output' has ended.
 It is passed two arguments: the process that was just ended, and the
 termination status (as a string).  Note that the first argument may be
 nil, in which case the user attempted to send a signal, but there was
 no relevant process.  This can be used for displaying help
 information, for example."
+  :version "24.1"                      ; removed eshell-reset-after-proc
   :type 'hook
   :group 'eshell-proc)
 
@@ -113,6 +115,14 @@ information, for example."
 
 ;;; Functions:
 
+(defun eshell-kill-process-function (proc status)
+  "Function run when killing a process.
+Runs `eshell-reset-after-proc' and `eshell-kill-hook', passing arguments
+PROC and STATUS to both."
+  (or (memq 'eshell-reset-after-proc eshell-kill-hook)
+      (eshell-reset-after-proc proc status))
+  (run-hook-with-args eshell-kill-hook proc status))
+
 (defun eshell-proc-initialize ()
   "Initialize the process handling code."
   (make-local-variable 'eshell-process-list)
@@ -346,7 +356,7 @@ See `eshell-needs-pipe'."
        (eshell-update-markers eshell-last-output-end)
        ;; Simulate the effect of eshell-sentinel.
        (eshell-close-handles (if (numberp exit-status) exit-status -1))
-       (run-hook-with-args 'eshell-kill-hook command exit-status)
+       (eshell-kill-process-function command exit-status)
        (or eshell-in-pipeline-p
            (setq eshell-last-sync-output-start nil))
        (if (not (numberp exit-status))
@@ -391,7 +401,7 @@ PROC is the process that's exiting.  STRING is the exit message."
                      (eshell-close-handles (process-exit-status proc) 'nil
                                            (cadr entry))))
                (eshell-remove-process-entry entry))))
-       (run-hook-with-args 'eshell-kill-hook proc string)))))
+       (eshell-kill-process-function proc string)))))
 
 (defun eshell-process-interact (func &optional all query)
   "Interact with a process, using PROMPT if more than one, via FUNC.
@@ -485,31 +495,29 @@ See the variable `eshell-kill-processes-on-exit'."
            (kill-buffer buf)))
       (message nil))))
 
-(custom-add-option 'eshell-exit-hook 'eshell-query-kill-processes)
-
 (defun eshell-interrupt-process ()
   "Interrupt a process."
   (interactive)
   (unless (eshell-process-interact 'interrupt-process)
-    (run-hook-with-args 'eshell-kill-hook nil "interrupt")))
+    (eshell-kill-process-function nil "interrupt")))
 
 (defun eshell-kill-process ()
   "Kill a process."
   (interactive)
   (unless (eshell-process-interact 'kill-process)
-    (run-hook-with-args 'eshell-kill-hook nil "killed")))
+    (eshell-kill-process-function nil "killed")))
 
 (defun eshell-quit-process ()
   "Send quit signal to process."
   (interactive)
   (unless (eshell-process-interact 'quit-process)
-    (run-hook-with-args 'eshell-kill-hook nil "quit")))
+    (eshell-kill-process-function nil "quit")))
 
 ;(defun eshell-stop-process ()
 ;  "Send STOP signal to process."
 ;  (interactive)
 ;  (unless (eshell-process-interact 'stop-process)
-;    (run-hook-with-args 'eshell-kill-hook nil "stopped")))
+;    (eshell-kill-process-function nil "stopped")))
 
 ;(defun eshell-continue-process ()
 ;  "Send CONTINUE signal to process."
@@ -518,7 +526,7 @@ See the variable `eshell-kill-processes-on-exit'."
 ;    ;; jww (1999-09-17): this signal is not dealt with yet.  For
 ;    ;; example, `eshell-reset' will be called, and so will
 ;    ;; `eshell-resume-eval'.
-;    (run-hook-with-args 'eshell-kill-hook nil "continue")))
+;    (eshell-kill-process-function nil "continue")))
 
 (defun eshell-send-eof-to-process ()
   "Send EOF to process."
index 8fb089631929e5f1870fb8babae75e56db25deba..ae87215a7671e00275255d5728f5c858e4f7fa84 100644 (file)
@@ -126,8 +126,9 @@ variable value, a subcommand, or even the result of a Lisp form."
 
 ;;; User Variables:
 
-(defcustom eshell-var-load-hook '(eshell-var-initialize)
+(defcustom eshell-var-load-hook nil
   "A list of functions to call when loading `eshell-var'."
+  :version "24.1"                      ; removed eshell-var-initialize
   :type 'hook
   :group 'eshell-var)