]> git.eshelyaron.com Git - emacs.git/commitdiff
(asm-mode): Fix bug#75542
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Jan 2025 22:18:24 +0000 (17:18 -0500)
committerEshel Yaron <me@eshelyaron.com>
Fri, 17 Jan 2025 11:44:49 +0000 (12:44 +0100)
* lisp/progmodes/asm-mode.el (asm-mode): Be careful not to override
changes in the mode map or in `comment-start`.
Move the use of `asm-mode-set-comment-hook` back to where it was before
commit 0cff4e67f1de.
(asm-mode-set-comment-hook): Declare it obsolete.

(cherry picked from commit 8fc5001ba5bc9fef3c438a070c87059fc19146a4)

etc/NEWS
lisp/progmodes/asm-mode.el

index ec792b74dd6b228d9a5099ccaf223336f466049d..43eab2b17dee00ef4c62a6dce90f59f653f56496 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -243,6 +243,11 @@ modal editing packages.
 \f
 * Changes in Specialized Modes and Packages in Emacs 31.1
 
+---
+** ASM mode
+*** 'asm-mode-set-comment-hook' is obsolete.
+You can now set `asm-comment-char' from 'asm-mode-hook' instead.
+
 ---
 ** Ibuffer
 *** New column 'recency' in Ibuffer display.
index a2334505db96639c943e00a2f95c84c1f0e768dd..2d1c645f42cab7c23dc64809b93a75230a896162 100644 (file)
 ;;
 ;; Code is indented to the first tab stop level.
 
-;; This mode runs two hooks:
-;;   1) `asm-mode-set-comment-hook' before the part of the initialization
-;;      depending on `asm-comment-char', and
-;;   2) `asm-mode-hook' at the end of initialization.
+;; This mode runs the hook `asm-mode-hook' at the end of initialization.
 
 ;;; Code:
 
    cpp-font-lock-keywords)
   "Additional expressions to highlight in Assembler mode.")
 
+(make-obsolete-variable 'asm-mode-set-comment-hook 'asm-mode-hook "31.0")
+
 ;;;###autoload
 (define-derived-mode asm-mode prog-mode "Assembler"
   "Major mode for editing typical assembler code.
@@ -117,9 +116,7 @@ Features a private abbrev table and the following bindings:
 
 The character used for making comments is set by the variable
 `asm-comment-char' (which defaults to `?\\;').
-
-Alternatively, you may set this variable in `asm-mode-set-comment-hook',
-which is called near the beginning of mode initialization.
+Alternatively, you may set this variable in `asm-mode-hook'.
 
 Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization.
 
@@ -127,15 +124,18 @@ Special commands:
 \\{asm-mode-map}"
   :after-hook
   (progn
-    (run-hooks 'asm-mode-set-comment-hook)
     ;; Make our own local child of `asm-mode-map'
     ;; so we can define our own comment character.
-    (use-local-map (make-composed-keymap nil asm-mode-map))
-    (local-set-key (vector asm-comment-char) #'asm-comment)
+    ;; FIXME: Use `post-self-insert-hook' instead and make it conditional
+    ;; on some "electricity" config var.
+    (unless (lookup-key asm-mode-map (vector asm-comment-char))
+      (use-local-map (make-composed-keymap nil asm-mode-map))
+      (local-set-key (vector asm-comment-char) #'asm-comment))
     (set-syntax-table (make-syntax-table asm-mode-syntax-table))
     (modify-syntax-entry       asm-comment-char "< b")
 
-    (setq-local comment-start (string asm-comment-char)))
+    (unless (local-variable-p 'comment-start)
+      (setq-local comment-start (string asm-comment-char))))
 
   (setq local-abbrev-table asm-mode-abbrev-table)
   (setq-local font-lock-defaults '(asm-font-lock-keywords))
@@ -143,6 +143,8 @@ Special commands:
   ;; Stay closer to the old TAB behavior (was tab-to-tab-stop).
   (setq-local tab-always-indent nil)
 
+  (run-hooks 'asm-mode-set-comment-hook)
+
   (setq-local comment-add 1)
   (setq-local comment-start-skip "\\(?:\\s<+\\|/[/*]+\\)[ \t]*")
   (setq-local comment-end-skip "[ \t]*\\(\\s>\\|\\*+/\\)")