branch: elpa/rpm-spec-mode
commit 5d8bc10065808eba97254da74342e8c86609c57a
Author: Björn Bidar <bjorn.bi...@thaodan.de>
Commit: Björn Bidar <bjorn.bi...@thaodan.de>

    Refactor to define mode using derived-mode
    
    Doing so removes a lot of boilerplate.
    Also fix fontification on Emacs 30.
    
    Signed-off-by: Björn Bidar <bjorn.bi...@thaodan.de>
---
 rpm-spec-mode.el | 149 +++++++++++++++++++++++++------------------------------
 1 file changed, 67 insertions(+), 82 deletions(-)

diff --git a/rpm-spec-mode.el b/rpm-spec-mode.el
index 62b7a63f77..d292fff097 100644
--- a/rpm-spec-mode.el
+++ b/rpm-spec-mode.el
@@ -65,6 +65,9 @@
 
 ;;; Code:
 (require 'compile)
+(require 'sh-script)
+(require 'cc-mode)
+(require 'easymenu)
 
 (defconst rpm-spec-mode-version "0.16" "Version of `rpm-spec-mode'.")
 
@@ -536,69 +539,69 @@ value returned by function `user-mail-address'."
   ;;(define-key rpm-spec-mode-map "\t" #'sh-indent-line)
   )
 
-(defconst rpm-spec-mode-menu
-  (purecopy '("RPM spec"
-              ["Insert Tag..."           rpm-insert-tag                t]
-              ["Change Tag..."           rpm-change-tag                t]
-              "---"
-              ["Go to section..."        rpm-mouse-goto-section  :keys "C-c 
C-o"]
-              ["Forward section"         rpm-forward-section           t]
-              ["Backward section"        rpm-backward-section          t]
-              "---"
-              ["Add change log entry..." rpm-add-change-log-entry      t]
-              ["Increase release tag"    rpm-increase-release-tag      t]
-              "---"
-              ("Add file entry"
-               ["Regular file..."        rpm-insert-file               t]
-               ["Config file..."         rpm-insert-config             t]
-               ["Document file..."       rpm-insert-doc                t]
-               ["Ghost file..."          rpm-insert-ghost              t]
-               "---"
-               ["Directory..."           rpm-insert-dir                t]
-               ["Document directory..."  rpm-insert-docdir             t]
-               "---"
-               ["Insert %{prefix}"       rpm-insert-true-prefix        t]
-               "---"
-               ["Default add \"%attr\" entry" rpm-toggle-add-attr
-                :style toggle :selected rpm-spec-add-attr]
-               ["Change default umask for files..."  rpm-files-umask   t]
-               ["Change default owner for files..."  rpm-files-owner   t]
-               ["Change default group for files..."  rpm-files-group   t])
-              ("Build Options"
-               ["Short circuit" rpm-toggle-short-circuit
-                :style toggle :selected rpm-spec-short-circuit]
-               ["Remove source" rpm-toggle-rmsource
-                :style toggle :selected rpm-spec-rmsource]
-               ["Clean"         rpm-toggle-clean
-                :style toggle :selected rpm-spec-clean]
-               ["No build"      rpm-toggle-nobuild
-                :style toggle :selected rpm-spec-nobuild]
-               ["Quiet"         rpm-toggle-quiet
-                :style toggle :selected rpm-spec-quiet]
-               ["GPG sign"      rpm-toggle-sign-gpg
-                :style toggle :selected rpm-spec-sign-gpg]
-               ["Ignore dependencies" rpm-toggle-nodeps
-                :style toggle :selected rpm-spec-nodeps]
-               "---"
-               ["Change timecheck value..."  rpm-change-timecheck-option   t]
-               ["Change buildroot value..."  rpm-change-buildroot-option   t]
-               ["Change target value..."     rpm-change-target-option      t])
-              ("RPM Build"
-               ["Execute \"%prep\" stage"    rpm-build-prepare             t]
-               ["Do a \"list check\""        rpm-list-check                t]
-               ["Do the \"%build\" stage"    rpm-build-compile             t]
-               ["Do the \"%install\" stage"  rpm-build-install             t]
-               "---"
-               ["Build binary package"       rpm-build-binary              t]
-               ["Build source package"       rpm-build-source              t]
-               ["Build binary and source"    rpm-build-all                 t])
-              "---"
-              ["About rpm-spec-mode"         rpm-about-rpm-spec-mode       t]
-              )))
+(easy-menu-define rpm-spec-mode-menu rpm-spec-mode-map
+  "Post menu for `rpm-spec-mode'."
+  '("RPM spec"
+    ["Insert Tag..."           rpm-insert-tag                t]
+    ["Change Tag..."           rpm-change-tag                t]
+    "---"
+    ["Go to section..."        rpm-mouse-goto-section  :keys "C-c C-o"]
+    ["Forward section"         rpm-forward-section           t]
+    ["Backward section"        rpm-backward-section          t]
+    "---"
+    ["Add change log entry..." rpm-add-change-log-entry      t]
+    ["Increase release tag"    rpm-increase-release-tag      t]
+    "---"
+    ("Add file entry"
+     ["Regular file..."        rpm-insert-file               t]
+     ["Config file..."         rpm-insert-config             t]
+     ["Document file..."       rpm-insert-doc                t]
+     ["Ghost file..."          rpm-insert-ghost              t]
+     "---"
+     ["Directory..."           rpm-insert-dir                t]
+     ["Document directory..."  rpm-insert-docdir             t]
+     "---"
+     ["Insert %{prefix}"       rpm-insert-true-prefix        t]
+     "---"
+     ["Default add \"%attr\" entry" rpm-toggle-add-attr
+      :style toggle :selected rpm-spec-add-attr]
+     ["Change default umask for files..."  rpm-files-umask   t]
+     ["Change default owner for files..."  rpm-files-owner   t]
+     ["Change default group for files..."  rpm-files-group   t])
+    ("Build Options"
+     ["Short circuit" rpm-toggle-short-circuit
+      :style toggle :selected rpm-spec-short-circuit]
+     ["Remove source" rpm-toggle-rmsource
+      :style toggle :selected rpm-spec-rmsource]
+     ["Clean"         rpm-toggle-clean
+      :style toggle :selected rpm-spec-clean]
+     ["No build"      rpm-toggle-nobuild
+      :style toggle :selected rpm-spec-nobuild]
+     ["Quiet"         rpm-toggle-quiet
+      :style toggle :selected rpm-spec-quiet]
+     ["GPG sign"      rpm-toggle-sign-gpg
+      :style toggle :selected rpm-spec-sign-gpg]
+     ["Ignore dependencies" rpm-toggle-nodeps
+      :style toggle :selected rpm-spec-nodeps]
+     "---"
+     ["Change timecheck value..."  rpm-change-timecheck-option   t]
+     ["Change buildroot value..."  rpm-change-buildroot-option   t]
+     ["Change target value..."     rpm-change-target-option      t])
+    ("RPM Build"
+     ["Execute \"%prep\" stage"    rpm-build-prepare             t]
+     ["Do a \"list check\""        rpm-list-check                t]
+     ["Do the \"%build\" stage"    rpm-build-compile             t]
+     ["Do the \"%install\" stage"  rpm-build-install             t]
+     "---"
+     ["Build binary package"       rpm-build-binary              t]
+     ["Build source package"       rpm-build-source              t]
+     ["Build binary and source"    rpm-build-all                 t])
+    "---"
+    ["About rpm-spec-mode"         rpm-about-rpm-spec-mode       t]))
+
 
 (defvar rpm-spec-font-lock-keywords
-  (list
-   (cons rpm-section-regexp rpm-spec-section-face)
+  `((cons rpm-section-regexp rpm-spec-section-face)
    '("%[a-zA-Z0-9_]+" 0 rpm-spec-macro-face)
    (cons (concat "^" rpm-obsolete-tags-regexp "\\(\([a-zA-Z0-9,_]+\)\\)[ 
\t]*:")
          '((1 'rpm-spec-obsolete-tag-face)
@@ -630,12 +633,9 @@ value returned by function `user-mail-address'."
      (4 rpm-spec-ghost-face))
    '("%{[^{}]*}" 0 rpm-spec-macro-face)
    '("$[a-zA-Z0-9_]+" 0 rpm-spec-var-face)
-   '("${[a-zA-Z0-9_]+}" 0 rpm-spec-var-face)
-   )
+   '("${[a-zA-Z0-9_]+}" 0 rpm-spec-var-face))
   "Additional expressions to highlight in `rpm-spec-mode'.")
 
-;;Initialize font lock for xemacs
-(put 'rpm-spec-mode 'font-lock-defaults '(rpm-spec-font-lock-keywords))
 
 (defvar rpm-spec-mode-abbrev-table nil
   "Abbrev table in use in `rpm-spec-mode' buffers.")
@@ -684,7 +684,7 @@ leaves point makes no difference."
 (add-hook 'rpm-spec-mode-new-file-hook 'rpm-spec-initialize)
 
 ;;;###autoload
-(defun rpm-spec-mode ()
+(define-derived-mode rpm-spec-mode shell-script-mode "RPM"
   "Major mode for editing RPM spec files.
 This is much like C mode except for the syntax of comments.  It uses
 the same keymap as C mode and has the same variables for customizing
@@ -692,22 +692,7 @@ indentation.  It has its own abbrev table and its own 
syntax table.
 
 Turning on RPM spec mode calls the value of the variable `rpm-spec-mode-hook'
 with no args, if that value is non-nil."
-  (interactive)
-  (kill-all-local-variables)
-  (condition-case nil
-      (require 'shindent)
-    (error
-     (require 'sh-script)))
-  (require 'cc-mode)
-  (use-local-map rpm-spec-mode-map)
-  (setq major-mode 'rpm-spec-mode)
   (rpm-update-mode-name)
-  (setq local-abbrev-table rpm-spec-mode-abbrev-table)
-  (set-syntax-table rpm-spec-mode-syntax-table)
-
-  (require 'easymenu)
-  (easy-menu-define rpm-spec-call-menu rpm-spec-mode-map
-                    "Post menu for `rpm-spec-mode'." rpm-spec-mode-menu)
 
   (if (and (= (buffer-size) 0) rpm-spec-initialize-sections)
       (run-hooks 'rpm-spec-mode-new-file-hook))
@@ -739,7 +724,7 @@ with no args, if that value is non-nil."
 ;  (setq comment-indent-function 'c-comment-indent)
   ;;Initialize font lock for GNU emacs.
   (make-local-variable 'font-lock-defaults)
-  (setq font-lock-defaults '(rpm-spec-font-lock-keywords nil t))
+  (setq font-lock-defaults '(rpm-spec-font-lock-keywords nil))
   (rpm-spec-mode-imenu-setup)
   (run-hooks 'rpm-spec-mode-hook))
 

Reply via email to