]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix misuses of `make-local-variable` on hooks
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 4 Nov 2020 05:24:45 +0000 (00:24 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 4 Nov 2020 05:24:45 +0000 (00:24 -0500)
* lisp/vc/smerge-mode.el (smerge-ediff):
* lisp/progmodes/python.el (python-pdbtrack-setup-tracking):
* lisp/net/tramp-smb.el (tramp-smb-call-winexe):
* lisp/net/secrets.el (secrets-mode):
* lisp/mail/rmail.el (rmail-variables):
* lisp/ielm.el (inferior-emacs-lisp-mode):
* lisp/erc/erc-log.el (erc-log-setup-logging): Use `add-hook`.

* lisp/eshell/em-unix.el (eshell/diff):
* lisp/eshell/em-hist.el (eshell-hist-initialize): Don't
`make-local-variable` on hooks.

12 files changed:
lisp/dframe.el
lisp/erc/erc-log.el
lisp/eshell/em-hist.el
lisp/eshell/em-unix.el
lisp/gnus/nnimap.el
lisp/ielm.el
lisp/mail/rmail.el
lisp/net/secrets.el
lisp/net/tramp-smb.el
lisp/progmodes/python.el
lisp/vc/smerge-mode.el
lisp/vc/vc-dispatcher.el

index efe2bc57d9378b890743acfd2d3cc6a61815ce1e..417477be27bf0fb0209eddfbe98f854d7c663c07 100644 (file)
@@ -287,6 +287,9 @@ CREATE-HOOK is a hook to run after creating a frame."
       ;; Correct use of `temp-buffer-show-function': Bob Weiner
       (if (and (boundp 'temp-buffer-show-hook)
               (boundp 'temp-buffer-show-function))
+         ;; FIXME: Doesn't this get us into an inf-loop when the
+          ;; `temp-buffer-show-function' runs `temp-buffer-show-hook'
+          ;; (as is normally the case)?
          (progn (make-local-variable 'temp-buffer-show-hook)
                 (setq temp-buffer-show-hook temp-buffer-show-function)))
       (make-local-variable 'temp-buffer-show-function)
index 2166123e6742f88189f79928b4f1a576acfb668e..de0a16ea3f054f61b2a4cca791c349155fddfbf8 100644 (file)
@@ -267,7 +267,7 @@ The current buffer is given by BUFFER."
     (with-current-buffer buffer
       (auto-save-mode -1)
       (setq buffer-file-name nil)
-      (set (make-local-variable 'write-file-functions) '(erc-save-buffer-in-logs))
+      (add-hook 'write-file-functions #'erc-save-buffer-in-logs nil t)
       (when erc-log-insert-log-on-open
        (ignore-errors
          (save-excursion
index 5cee1bad36451b3887f08f9317457e193339cd67..bdc21c916c687a27f88b4b60457231d078f956b5 100644 (file)
@@ -75,8 +75,7 @@
 (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)
+  :type 'hook)
 
 (defcustom eshell-hist-unload-hook
   (list
@@ -84,8 +83,7 @@
     (lambda ()
       (remove-hook 'kill-emacs-hook 'eshell-save-some-history))))
   "A hook that gets run when `eshell-hist' is unloaded."
-  :type 'hook
-  :group 'eshell-hist)
+  :type 'hook)
 
 (defcustom eshell-history-file-name
   (expand-file-name "history" eshell-directory-name)
 See also `eshell-read-history' and `eshell-write-history'.
 If it is nil, Eshell will use the value of HISTFILE."
   :type '(choice (const :tag "Use HISTFILE" nil)
-                file)
-  :group 'eshell-hist)
+                file))
 
 (defcustom eshell-history-size 128
   "Size of the input history ring.  If nil, use envvar HISTSIZE."
   :type '(choice (const :tag "Use HISTSIZE" nil)
-                integer)
-  :group 'eshell-hist)
+                integer))
 
 (defcustom eshell-hist-ignoredups nil
   "If non-nil, don't add input matching the last on the input ring.
 This mirrors the optional behavior of bash."
-  :type 'boolean
-  :group 'eshell-hist)
+  :type 'boolean)
 
 (defcustom eshell-save-history-on-exit t
   "Determine if history should be automatically saved.
@@ -118,8 +113,7 @@ If set to `ask', ask if any Eshell buffers are open at exit time.
 If set to t, history will always be saved, silently."
   :type '(choice (const :tag "Never" nil)
                 (const :tag "Ask" ask)
-                (const :tag "Always save" t))
-  :group 'eshell-hist)
+                (const :tag "Always save" t)))
 
 (defcustom eshell-input-filter 'eshell-input-filter-default
   "Predicate for filtering additions to input history.
@@ -128,8 +122,7 @@ the input history list.  Default is to save anything that isn't all
 whitespace."
   :type '(radio (function-item eshell-input-filter-default)
                 (function-item eshell-input-filter-initial-space)
-                (function :tag "Other function"))
-  :group 'eshell-hist)
+                (function :tag "Other function")))
 
 (put 'eshell-input-filter 'risky-local-variable t)
 
@@ -138,31 +131,26 @@ whitespace."
 Otherwise, typing <M-p> and <M-n> will always go to the next history
 element, regardless of any text on the command line.  In that case,
 <C-c M-r> and <C-c M-s> still offer that functionality."
-  :type 'boolean
-  :group 'eshell-hist)
+  :type 'boolean)
 
 (defcustom eshell-hist-move-to-end t
   "If non-nil, move to the end of the buffer before cycling history."
-  :type 'boolean
-  :group 'eshell-hist)
+  :type 'boolean)
 
 (defcustom eshell-hist-event-designator
   "^!\\(!\\|-?[0-9]+\\|\\??[^:^$%*?]+\\??\\|#\\)"
   "The regexp used to identifier history event designators."
-  :type 'regexp
-  :group 'eshell-hist)
+  :type 'regexp)
 
 (defcustom eshell-hist-word-designator
   "^:?\\([0-9]+\\|[$^%*]\\)?\\(-[0-9]*\\|[$^%*]\\)?"
   "The regexp used to identify history word designators."
-  :type 'regexp
-  :group 'eshell-hist)
+  :type 'regexp)
 
 (defcustom eshell-hist-modifier
   "^\\(:\\([hretpqx&g]\\|s/\\([^/]*\\)/\\([^/]*\\)/\\)\\)*"
   "The regexp used to identity history modifiers."
-  :type 'regexp
-  :group 'eshell-hist)
+  :type 'regexp)
 
 (defcustom eshell-hist-rebind-keys-alist
   '(([(control ?p)]   . eshell-previous-input)
@@ -180,8 +168,7 @@ element, regardless of any text on the command line.  In that case,
   "History keys to bind differently if point is in input text."
   :type '(repeat (cons (vector :tag "Keys to bind"
                               (repeat :inline t sexp))
-                      (function :tag "Command")))
-  :group 'eshell-hist)
+                      (function :tag "Command"))))
 
 ;;; Internal Variables:
 
@@ -308,7 +295,6 @@ Returns nil if INPUT is prepended by blank space, otherwise non-nil."
 
   (add-hook 'kill-emacs-hook #'eshell-save-some-history)
 
-  (make-local-variable 'eshell-input-filter-functions)
   (add-hook 'eshell-input-filter-functions #'eshell-add-to-history nil t))
 
 (defun eshell-save-some-history ()
index 68aa680327855cbe61a94406b42af2e04962c358..937b8bfa391d6afd4ccdd7d1a58b37139644abad 100644 (file)
@@ -1007,18 +1007,17 @@ Show wall-clock time elapsed during execution of COMMAND.")
               (throw 'eshell-replace-command
                      (eshell-parse-command "*diff" orig-args))))
          (when (fboundp 'diff-mode)
-           (make-local-variable 'compilation-finish-functions)
            (add-hook
             'compilation-finish-functions
-            `(lambda (buff msg)
+            (lambda (buff _msg)
                (with-current-buffer buff
                  (diff-mode)
-                 (set (make-local-variable 'eshell-diff-window-config)
-                      ,config)
-                 (local-set-key [?q] 'eshell-diff-quit)
+                 (set (make-local-variable 'eshell-diff-window-config) config)
+                 (local-set-key [?q] #'eshell-diff-quit)
                  (if (fboundp 'turn-on-font-lock-if-enabled)
                      (turn-on-font-lock-if-enabled))
-                 (goto-char (point-min))))))
+                 (goto-char (point-min))))
+            nil t))
          (pop-to-buffer (current-buffer))))))
   nil)
 
index 8a88e0e6e644750611afc19927df8ef9e442b4e4..7984998d214b3f2478014fc525ead9de0b118276 100644 (file)
@@ -365,7 +365,7 @@ textual parts.")
     (mm-disable-multibyte)
     (buffer-disable-undo)
     (gnus-add-buffer)
-    (set (make-local-variable 'after-change-functions) nil)
+    (set (make-local-variable 'after-change-functions) nil) ;FIXME: Why?
     (set (make-local-variable 'nnimap-object)
         (make-nnimap :server (nnoo-current-server 'nnimap)
                      :initial-resync 0))
index b3654b91d371bd6b42f7a76df459f2c81a17e6ea..91d025dd5dd14efbf3c6f348706ec974926961fb 100644 (file)
@@ -533,9 +533,10 @@ Customized bindings may be defined in `ielm-map', which currently contains:
   (set (make-local-variable 'paragraph-start) comint-prompt-regexp)
   (setq comint-input-sender 'ielm-input-sender)
   (setq comint-process-echoes nil)
-  (set (make-local-variable 'completion-at-point-functions)
-       '(comint-replace-by-expanded-history
-         ielm-complete-filename elisp-completion-at-point))
+  (dolist (f '(elisp-completion-at-point
+               ielm-complete-filename
+               comint-replace-by-expanded-history))
+    (add-hook 'completion-at-point-functions f nil t))
   (add-hook 'eldoc-documentation-functions
             #'elisp-eldoc-var-docstring nil t)
   (add-hook 'eldoc-documentation-functions
index 86084b03f47146dfd7b5bb3d120461e8efd2a080..2c972ee7aac818d6ba02b3dd52274be4bc9becad 100644 (file)
@@ -1492,8 +1492,7 @@ If so restore the actual mbox message collection."
   (setq require-final-newline nil)
   (make-local-variable 'version-control)
   (setq version-control 'never)
-  (make-local-variable 'kill-buffer-hook)
-  (add-hook 'kill-buffer-hook 'rmail-mode-kill-summary)
+  (add-hook 'kill-buffer-hook #'rmail-mode-kill-summary nil t)
   (make-local-variable 'file-precious-flag)
   (setq file-precious-flag t)
   (make-local-variable 'desktop-save-buffer)
index dc1b468a1189a2f403e52fd0fca717ca0d070f4f..f98ded4b0c6e3e67495d7fe228ceed21e61246a6 100644 (file)
@@ -795,8 +795,8 @@ In this mode, widgets represent the search results.
   (set (make-local-variable 'revert-buffer-function)
        #'secrets-show-collections)
   ;; When we toggle, we must set temporary widgets.
-  (set (make-local-variable 'tree-widget-after-toggle-functions)
-       '(secrets-tree-widget-after-toggle-function)))
+  (add-hook 'tree-widget-after-toggle-functions
+            #'secrets-tree-widget-after-toggle-function nil t))
 
 ;; It doesn't make sense to call it interactively.
 (put 'secrets-mode 'disabled t)
index 3220e5160502ef3592c687d0d3c98a10e4e59942..a0405085537c37f3db0ff6464aa02dce202bc8bb 100644 (file)
@@ -2143,8 +2143,7 @@ Removes smb prompt.  Returns nil if an error message has appeared."
     "%s %s"
     tramp-smb-winexe-shell-command tramp-smb-winexe-shell-command-switch))
 
-  (set (make-local-variable 'kill-buffer-hook)
-       '(tramp-smb-kill-winexe-function))
+  (add-hook 'kill-buffer-hook #'tramp-smb-kill-winexe-function nil t)
 
   ;; Suppress "^M".  Shouldn't we specify utf8?
   (set-process-coding-system (tramp-get-connection-process vec) 'raw-text-dos)
index 53b654001e326ed86e333e44db6060a1b483ec02..d6feba254b468c55a62062c2cdb308841e4deb9b 100644 (file)
@@ -4011,8 +4011,8 @@ Argument OUTPUT is a string with the output from the comint process."
   "Setup pdb tracking in current buffer."
   (make-local-variable 'python-pdbtrack-buffers-to-kill)
   (make-local-variable 'python-pdbtrack-tracked-buffer)
-  (add-to-list (make-local-variable 'comint-input-filter-functions)
-               #'python-pdbtrack-comint-input-filter-function)
+  (add-hook 'comint-input-filter-functions
+            #'python-pdbtrack-comint-input-filter-function nil t)
   (add-to-list (make-local-variable 'comint-output-filter-functions)
                #'python-pdbtrack-comint-output-filter-function)
   (add-function :before (process-sentinel (get-buffer-process (current-buffer)))
index d0a83fd7c49e8ca63d23e4cb2b16bf9472d991b1..fe7724d90270e6a3a8417118f6659e547dfe3b3c 100644 (file)
@@ -1352,24 +1352,26 @@ buffer names."
     ;; Do a few further adjustments and take precautions for exit.
     (set (make-local-variable 'smerge-ediff-windows) config)
     (set (make-local-variable 'smerge-ediff-buf) buf)
-    (set (make-local-variable 'ediff-quit-hook)
-        (lambda ()
-          (let ((buffer-A ediff-buffer-A)
-                (buffer-B ediff-buffer-B)
-                (buffer-C ediff-buffer-C)
-                (buffer-Ancestor ediff-ancestor-buffer)
-                (buf smerge-ediff-buf)
-                (windows smerge-ediff-windows))
-            (ediff-cleanup-mess)
-            (with-current-buffer buf
-              (erase-buffer)
-              (insert-buffer-substring buffer-C)
-              (kill-buffer buffer-A)
-              (kill-buffer buffer-B)
-              (kill-buffer buffer-C)
-              (when (bufferp buffer-Ancestor) (kill-buffer buffer-Ancestor))
-              (set-window-configuration windows)
-              (message "Conflict resolution finished; you may save the buffer")))))
+    (add-hook 'ediff-quit-hook
+             (lambda ()
+               (let ((buffer-A ediff-buffer-A)
+                     (buffer-B ediff-buffer-B)
+                     (buffer-C ediff-buffer-C)
+                     (buffer-Ancestor ediff-ancestor-buffer)
+                     (buf smerge-ediff-buf)
+                     (windows smerge-ediff-windows))
+                 (ediff-cleanup-mess)
+                 (with-current-buffer buf
+                   (erase-buffer)
+                   (insert-buffer-substring buffer-C)
+                   (kill-buffer buffer-A)
+                   (kill-buffer buffer-B)
+                   (kill-buffer buffer-C)
+                   (when (bufferp buffer-Ancestor)
+                     (kill-buffer buffer-Ancestor))
+                   (set-window-configuration windows)
+                   (message "Conflict resolution finished; you may save the buffer"))))
+             nil t)
     (message "Please resolve conflicts now; exit ediff when done")))
 
 (defun smerge-makeup-conflict (pt1 pt2 pt3 &optional pt4)
index 99bf5bf9b641b9050cfd2d031468faf740633136..932b9158f2bf3a33d0b733ab6da4f283b69ddd5b 100644 (file)
@@ -138,7 +138,9 @@ preserve the setting."
 ;; Variables the user doesn't need to know about.
 
 (defvar vc-log-operation nil)
-(defvar vc-log-after-operation-hook nil)
+(defvar vc-log-after-operation-hook nil
+  "Name of the hook run at the end of `vc-finish-logentry'.
+BEWARE: Despite its name, this variable is not itself a hook!")
 (defvar vc-log-fileset)
 
 ;; In a log entry buffer, this is a local variable