From: Mark Wooding Date: Wed, 18 Mar 2015 19:06:08 +0000 (+0000) Subject: el/dot-emacs.el: Fix assembler mode handling. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/profile/commitdiff_plain/9032280b6bd8718a48007f8e407521d1bfb01c80?ds=sidebyside el/dot-emacs.el: Fix assembler mode handling. Eliminate the crappy old `arm-assembler-mode'. Define wrappers around `asm-mode' which set the right comment characters. --- diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 4601e23..3440c82 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -2109,100 +2109,27 @@ (defun mdw-fontify-icon () (mdw-post-config-mode-hack)) -;;;-------------------------------------------------------------------------- -;;; ARM assembler programming configuration. - -;; There doesn't appear to be an Emacs mode for this yet. -;; -;; Better do something about that, I suppose. - -(defvar arm-assembler-mode-map nil) -(defvar arm-assembler-abbrev-table nil) -(defvar arm-assembler-mode-syntax-table (make-syntax-table)) - -(or arm-assembler-mode-map - (progn - (setq arm-assembler-mode-map (make-sparse-keymap)) - (define-key arm-assembler-mode-map "\C-m" 'arm-assembler-newline) - (define-key arm-assembler-mode-map [C-return] 'newline) - (define-key arm-assembler-mode-map "\t" 'tab-to-tab-stop))) - -(defun arm-assembler-mode () - "Major mode for ARM assembler programs" - (interactive) - - ;; Do standard major mode things. - (kill-all-local-variables) - (use-local-map arm-assembler-mode-map) - (setq local-abbrev-table arm-assembler-abbrev-table) - (setq major-mode 'arm-assembler-mode) - (setq mode-name "ARM assembler") - - ;; Set up syntax table. - (set-syntax-table arm-assembler-mode-syntax-table) - (modify-syntax-entry ?; ; Nasty hack - "<" arm-assembler-mode-syntax-table) - (modify-syntax-entry ?\n ">" arm-assembler-mode-syntax-table) - (modify-syntax-entry ?_ "_" arm-assembler-mode-syntax-table) - (modify-syntax-entry ?' "\"'" arm-assembler-mode-syntax-table) - - (make-local-variable 'comment-start) - (setq comment-start ";") - (make-local-variable 'comment-end) - (setq comment-end "") - (make-local-variable 'comment-column) - (setq comment-column 48) - (make-local-variable 'comment-start-skip) - (setq comment-start-skip ";+[ \t]*") - - ;; Play with indentation. - (make-local-variable 'indent-line-function) - (setq indent-line-function 'indent-relative-maybe) - - ;; Set fill prefix. - (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)") - - ;; Fiddle with fontification. - (make-local-variable 'font-lock-keywords) - (setq font-lock-keywords - (list - - ;; Handle numbers too. - ;; - ;; The following isn't quite right, but it's close enough. - (list (concat "\\(" - "&[0-9a-fA-F]+\\|" - "\\<[0-9]+\\(\\.[0-9]*\\|_[0-9a-zA-Z]+\\|\\)" - "\\)") - '(0 mdw-number-face)) - - ;; Do something about operators. - (list "^[^ \t]*[ \t]+\\(GET\\|LNK\\)[ \t]+\\([^;\n]*\\)" - '(1 font-lock-keyword-face) - '(2 font-lock-string-face)) - (list ":[a-zA-Z]+:" - '(0 font-lock-keyword-face)) - - ;; Do menemonics and directives. - (list "^[^ \t]*[ \t]+\\([a-zA-Z]+\\)" - '(1 font-lock-keyword-face)) - - ;; And anything else is punctuation. - (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))) - - (mdw-post-config-mode-hack) - (run-hooks 'arm-assembler-mode-hook)) - ;;;-------------------------------------------------------------------------- ;;; Assembler mode. (defun mdw-fontify-asm () (modify-syntax-entry ?' "\"") (modify-syntax-entry ?. "w") + (modify-syntax-entry ?; "." + ) + (modify-syntax-entry asm-comment-char "") (setf fill-prefix nil) (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)")) +(define-derived-mode x86-asm-mode asm-mode "x86 assembler" + "Assembler mode variant which uses `#' as the comment character." + (set (make-variable-buffer-local 'asm-comment-char) ?#)) + +(define-derived-mode arm-asm-mode asm-mode "ARM assembler" + "Assembler mode variant which uses `@' as the comment character." + (set (make-variable-buffer-local 'asm-comment-char) ?@)) + ;;;-------------------------------------------------------------------------- ;;; TCL configuration.