comparison lisp/progmodes/meta-mode.el @ 111870:b47e85affa59

Derive from prog-mode, use derived-mode-p, and fix up various minor style issues in lisp/progmodes. * lisp/progmodes/vhdl-mode.el (vhdl-write-file-hooks-init) (vhdl-hs-minor-mode, vhdl-ps-print-init): Fix make-local-variable -> make-local-hook. * lisp/progmodes/sh-script.el (sh-require-final-newline): Remove. (sh-set-shell): Don't set require-final-newline since it's already done by prog-mode. * lisp/progmodes/modula2.el (m2-mode): Don't make m2-end-comment-column since we never set it. * lisp/progmodes/ebrowse.el (ebrowse-set-tree-indentation): Use read-string and standard prompt. * lisp/progmodes/dcl-mode.el (dcl-mode-map): Move init into declaration. * lisp/progmodes/meta-mode.el (meta-mode-abbrev-table): Merge init and decl. (meta-common-mode-syntax-table): Rename from meta-mode-syntax-table. (meta-common-mode-map): Rename from meta-mode-map. Remove C-m binding, which is a user preference, not mode specific. (meta-common-mode): New major mode; replace meta-common-initialization. * lisp/progmodes/js.el (js-mode): Call syntax-propertize rather than messing around with font-lock. * lisp/progmodes/etags.el (select-tags-table-mode): Derive from special-mode. * lisp/progmodes/octave-mod.el (octave-mode): * lisp/progmodes/gdb-mi.el (gdb-inferior-io-mode, gdb-threads-mode) (gdb-memory-mode, gdb-disassembly-mode, gdb-breakpoints-mode) (gdb-frames-mode, gdb-locals-mode, gdb-registers-mode): Let define-derived-mode do its job. * lisp/progmodes/cpp.el (cpp-edit-mode-map): Move initialization into declaration. (cpp-edit-mode): Use define-derived-mode. (cpp-edit-load): Use derived-mode-p. * lisp/progmodes/mixal-mode.el (mixal-mode): * lisp/progmodes/f90.el (f90-mode): * lisp/progmodes/cfengine.el (cfengine-mode): Don't bother setting require-final-newline since prog-mode does it already. * lisp/progmodes/cc-cmds.el (c-update-modeline): Use match-string. * lisp/progmodes/asm-mode.el (asm-mode-map): Fix menu setup. * lisp/progmodes/antlr-mode.el: Require cc-mode upfront. (antlr-mode-syntax-table, antlr-action-syntax-table): Initialize in the declaration. (antlr-directory-dependencies, antlr-show-makefile-rules): Use derived-mode-p. (antlr-language-option): Don't assume point-min==1. (antlr-mode): Use define-derived-mode. * lisp/progmodes/ada-mode.el: Use derived-mode-p. (ada-mode): Use define-derived-mode. Use hack-local-variables-hook. * lisp/progmodes/vhdl-mode.el (vhdl-mode): * lisp/progmodes/verilog-mode.el (verilog-mode): * lisp/progmodes/vera-mode.el (vera-mode): * lisp/progmodes/sql.el (sql-mode): * lisp/progmodes/scheme.el (scheme-mode): * lisp/progmodes/perl-mode.el (perl-mode): * lisp/progmodes/octave-inf.el (inferior-octave-mode): * lisp/progmodes/autoconf.el (autoconf-mode): * lisp/progmodes/m4-mode.el (m4-mode): * lisp/progmodes/inf-lisp.el (inferior-lisp-mode): * lisp/progmodes/idlwave.el (idlwave-mode): * lisp/progmodes/icon.el (icon-mode): * lisp/progmodes/idlw-help.el (idlwave-help-mode): * lisp/progmodes/dcl-mode.el (dcl-mode): * lisp/progmodes/idlw-shell.el (idlwave-shell-mode): * lisp/progmodes/ebrowse.el (ebrowse-tree-mode, ebrowse-electric-list-mode) (ebrowse-member-mode, ebrowse-electric-position-mode): Use define-derived-mode. * lisp/progmodes/xscheme.el (xscheme-start) (local-set-scheme-interaction-buffer, scheme-interaction-mode): * lisp/progmodes/which-func.el (which-function): * lisp/progmodes/vhdl-mode.el (vhdl-set-style): * lisp/progmodes/verilog-mode.el (verilog-set-compile-command) (verilog-modify-compile-command, verilog-error-regexp-add-xemacs) (verilog-set-define, verilog-auto-reeval-locals): * lisp/progmodes/sql.el (sql-product-font-lock, sql-interactive-mode): * lisp/progmodes/simula.el (simula-mode): * lisp/progmodes/scheme.el (scheme-mode-variables, dsssl-mode): * lisp/progmodes/python.el (python-check, python-mode): * lisp/progmodes/prolog.el (prolog-mode-variables): * lisp/progmodes/gud.el (gud-tooltip-activate-mouse-motions): * lisp/progmodes/ebrowse.el (ebrowse-view-file-other-frame): * lisp/progmodes/delphi.el (delphi-mode): * lisp/progmodes/cc-styles.el (c-setup-paragraph-variables): * lisp/progmodes/cc-mode.el (c-basic-common-init, c-common-init) (c-font-lock-init): Move make-local-variable to their setq. * lisp/progmodes/xscheme.el (exit-scheme-interaction-mode) (xscheme-enter-interaction-mode, xscheme-enter-debugger-mode) (xscheme-debugger-mode-p, xscheme-send-string-1): * lisp/progmodes/tcl.el (inferior-tcl-proc, tcl-current-word) (tcl-load-file, tcl-restart-with-file): * lisp/progmodes/ps-mode.el (ps-run-running): * lisp/progmodes/gdb-mi.el (gud-watch, gdb-mouse-set-clear-breakpoint): * lisp/progmodes/js.el (js--get-all-known-symbols): * lisp/progmodes/inf-lisp.el (inferior-lisp-proc): * lisp/progmodes/idlwave.el (idlwave-beginning-of-statement) (idlwave-template, idlwave-update-buffer-routine-info) (idlwave-update-current-buffer-info) (idlwave-get-routine-info-from-buffers, idlwave-choose) (idlwave-scan-class-info, idlwave-fix-keywords) (idlwave-list-buffer-load-path-shadows): * lisp/progmodes/idlw-toolbar.el (idlwave-toolbar, idlwave-toolbar-add) (idlwave-toolbar-remove): * lisp/progmodes/idlw-shell.el (idlwave-shell-save-and-action) (idlwave-shell-file-name, idlwave-shell-electric-debug-all-off) (idlwave-shell-menu-def): * lisp/progmodes/idlw-complete-structtag.el (idlwave-prepare-structure-tag-completion): * lisp/progmodes/gud.el (gud-set-buffer): * lisp/progmodes/f90.el (f90-backslash-not-special): * lisp/progmodes/delphi.el (delphi-find-unit): Use derived-mode-p.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 10 Dec 2010 15:00:25 -0500
parents c4afb802863e
children 417b1e4d63cd
comparison
equal deleted inserted replaced
111869:2b8673bc05c8 111870:b47e85affa59
472 (string-lessp (car a) (car b))) 472 (string-lessp (car a) (car b)))
473 473
474 474
475 (defun meta-complete-symbol () 475 (defun meta-complete-symbol ()
476 "Perform completion on Metafont or MetaPost symbol preceding point." 476 "Perform completion on Metafont or MetaPost symbol preceding point."
477 ;; FIXME: Use completion-at-point-functions.
477 (interactive "*") 478 (interactive "*")
478 (let ((list meta-complete-list) 479 (let ((list meta-complete-list)
479 entry) 480 entry)
480 (while list 481 (while list
481 (setq entry (car list) 482 (setq entry (car list)
842 843
843 844
844 845
845 ;;; Syntax table, keymap and menu. 846 ;;; Syntax table, keymap and menu.
846 847
847 (defvar meta-mode-abbrev-table nil 848 (define-abbrev-table 'meta-mode-abbrev-table ()
848 "Abbrev table used in Metafont or MetaPost mode.") 849 "Abbrev table used in Metafont or MetaPost mode.")
849 (define-abbrev-table 'meta-mode-abbrev-table ()) 850
850 851 (defvar meta-common-mode-syntax-table
851 (defvar meta-mode-syntax-table
852 (let ((st (make-syntax-table))) 852 (let ((st (make-syntax-table)))
853 ;; underscores are word constituents 853 ;; underscores are word constituents
854 (modify-syntax-entry ?_ "w" st) 854 (modify-syntax-entry ?_ "w" st)
855 ;; miscellaneous non-word symbols 855 ;; miscellaneous non-word symbols
856 (modify-syntax-entry ?# "_" st) 856 (modify-syntax-entry ?# "_" st)
883 ;; escape character, needed for embedded TeX code 883 ;; escape character, needed for embedded TeX code
884 (modify-syntax-entry ?\\ "\\" st) 884 (modify-syntax-entry ?\\ "\\" st)
885 st) 885 st)
886 "Syntax table used in Metafont or MetaPost mode.") 886 "Syntax table used in Metafont or MetaPost mode.")
887 887
888 (defvar meta-mode-map 888 (defvar meta-common-mode-map
889 (let ((map (make-sparse-keymap))) 889 (let ((map (make-sparse-keymap)))
890 (define-key map "\C-m" 'reindent-then-newline-and-indent)
891 ;; Comment Paragraphs: 890 ;; Comment Paragraphs:
892 ;; (define-key map "\M-a" 'backward-sentence) 891 ;; (define-key map "\M-a" 'backward-sentence)
893 ;; (define-key map "\M-e" 'forward-sentence) 892 ;; (define-key map "\M-e" 'forward-sentence)
894 ;; (define-key map "\M-h" 'mark-paragraph) 893 ;; (define-key map "\M-h" 'mark-paragraph)
895 ;; (define-key map "\M-q" 'fill-paragraph) 894 ;; (define-key map "\M-q" 'fill-paragraph)
913 ;; (define-key map "\C-c\C-c" 'meta-command-file) 912 ;; (define-key map "\C-c\C-c" 'meta-command-file)
914 ;; (define-key map "\C-c\C-k" 'meta-kill-job) 913 ;; (define-key map "\C-c\C-k" 'meta-kill-job)
915 ;; (define-key map "\C-c\C-l" 'meta-recenter-output) 914 ;; (define-key map "\C-c\C-l" 'meta-recenter-output)
916 map) 915 map)
917 "Keymap used in Metafont or MetaPost mode.") 916 "Keymap used in Metafont or MetaPost mode.")
918 917 (define-obsolete-variable-alias 'meta-mode-map 'meta-common-mode-map "24.1")
919 918
920 (easy-menu-define 919 (easy-menu-define
921 meta-mode-menu meta-mode-map 920 meta-mode-menu meta-common-mode-map
922 "Menu used in Metafont or MetaPost mode." 921 "Menu used in Metafont or MetaPost mode."
923 (list "Meta" 922 (list "Meta"
924 ["Forward Environment" meta-beginning-of-defun t] 923 ["Forward Environment" meta-beginning-of-defun t]
925 ["Backward Environment" meta-end-of-defun t] 924 ["Backward Environment" meta-end-of-defun t]
926 "--" 925 "--"
974 973
975 974
976 975
977 ;;; Initialization. 976 ;;; Initialization.
978 977
979 (defun meta-common-initialization () 978 (define-derived-mode meta-common-mode prog-mode "-Meta-common-"
980 "Common initialization for Metafont or MetaPost mode." 979 "Common initialization for Metafont or MetaPost mode."
981 (kill-all-local-variables) 980 :abbrev-table meta-mode-abbrev-table
982 981 (set (make-local-variable 'paragraph-start)
983 (make-local-variable 'paragraph-start) 982 (concat page-delimiter "\\|$"))
984 (make-local-variable 'paragraph-separate) 983 (set (make-local-variable 'paragraph-separate)
985 (setq paragraph-start 984 (concat page-delimiter "\\|$"))
986 (concat page-delimiter "\\|$")) 985
987 (setq paragraph-separate 986 (set (make-local-variable 'paragraph-ignore-fill-prefix) t)
988 (concat page-delimiter "\\|$")) 987
989 988 (set (make-local-variable 'comment-start-skip) "%+[ \t\f]*")
990 (make-local-variable 'paragraph-ignore-fill-prefix) 989 (set (make-local-variable 'comment-start) "%")
991 (setq paragraph-ignore-fill-prefix t) 990 (set (make-local-variable 'comment-end) "")
992 991 (set (make-local-variable 'comment-multi-line) nil)
993 (make-local-variable 'comment-start-skip)
994 (make-local-variable 'comment-start)
995 (make-local-variable 'comment-end)
996 (make-local-variable 'comment-multi-line)
997 (setq comment-start-skip "%+[ \t\f]*")
998 (setq comment-start "%")
999 (setq comment-end "")
1000 (setq comment-multi-line nil)
1001 992
1002 ;; We use `back-to-indentation' but \f is no indentation sign. 993 ;; We use `back-to-indentation' but \f is no indentation sign.
1003 (modify-syntax-entry ?\f "_ ") 994 (modify-syntax-entry ?\f "_ ")
1004 995
1005 (make-local-variable 'parse-sexp-ignore-comments) 996 (set (make-local-variable 'parse-sexp-ignore-comments) t)
1006 (setq parse-sexp-ignore-comments t) 997
1007 998 (set (make-local-variable 'comment-indent-function) #'meta-comment-indent)
1008 (make-local-variable 'comment-indent-function) 999 (set (make-local-variable 'indent-line-function) #'meta-indent-line)
1009 (setq comment-indent-function 'meta-comment-indent)
1010 (make-local-variable 'indent-line-function)
1011 (setq indent-line-function 'meta-indent-line)
1012 ;; No need to define a mode-specific 'indent-region-function. 1000 ;; No need to define a mode-specific 'indent-region-function.
1013 ;; Simply use the generic 'indent-region and 'comment-region. 1001 ;; Simply use the generic 'indent-region and 'comment-region.
1014 1002
1015 ;; Set defaults for font-lock mode. 1003 ;; Set defaults for font-lock mode.
1016 (make-local-variable 'font-lock-defaults) 1004 (set (make-local-variable 'font-lock-defaults)
1017 (setq font-lock-defaults 1005 '(meta-font-lock-keywords
1018 '(meta-font-lock-keywords 1006 nil nil ((?_ . "w")) nil
1019 nil nil ((?_ . "w")) nil 1007 (font-lock-comment-start-regexp . "%")))
1020 (font-lock-comment-start-regexp . "%")))
1021 1008
1022 ;; Activate syntax table, keymap and menu. 1009 ;; Activate syntax table, keymap and menu.
1023 (setq local-abbrev-table meta-mode-abbrev-table) 1010 (easy-menu-add meta-mode-menu))
1024 (set-syntax-table meta-mode-syntax-table)
1025 (use-local-map meta-mode-map)
1026 (easy-menu-add meta-mode-menu)
1027 )
1028 1011
1029 1012
1030 ;;;###autoload 1013 ;;;###autoload
1031 (defun metafont-mode () 1014 (define-derived-mode metafont-mode meta-common-mode "Metafont"
1032 "Major mode for editing Metafont sources. 1015 "Major mode for editing Metafont sources."
1033 Special commands:
1034 \\{meta-mode-map}
1035
1036 Turning on Metafont mode calls the value of the variables
1037 `meta-common-mode-hook' and `metafont-mode-hook'."
1038 (interactive)
1039 (meta-common-initialization)
1040 (setq mode-name "Metafont")
1041 (setq major-mode 'metafont-mode)
1042
1043 ;; Set defaults for completion function. 1016 ;; Set defaults for completion function.
1044 (make-local-variable 'meta-symbol-list) 1017 (set (make-local-variable 'meta-symbol-list) nil)
1045 (make-local-variable 'meta-symbol-changed) 1018 (set (make-local-variable 'meta-symbol-changed) nil)
1046 (make-local-variable 'meta-complete-list)
1047 (setq meta-symbol-list nil)
1048 (setq meta-symbol-changed nil)
1049 (apply 'meta-add-symbols metafont-symbol-list) 1019 (apply 'meta-add-symbols metafont-symbol-list)
1050 (setq meta-complete-list 1020 (set (make-local-variable 'meta-complete-list)
1051 (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list) 1021 (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list)
1052 (list "" 'ispell-complete-word))) 1022 (list "" 'ispell-complete-word))))
1053 (run-mode-hooks 'meta-common-mode-hook 'metafont-mode-hook))
1054 1023
1055 ;;;###autoload 1024 ;;;###autoload
1056 (defun metapost-mode () 1025 (define-derived-mode metapost-mode meta-common-mode "MetaPost"
1057 "Major mode for editing MetaPost sources. 1026 "Major mode for editing MetaPost sources."
1058 Special commands:
1059 \\{meta-mode-map}
1060
1061 Turning on MetaPost mode calls the value of the variable
1062 `meta-common-mode-hook' and `metafont-mode-hook'."
1063 (interactive)
1064 (meta-common-initialization)
1065 (setq mode-name "MetaPost")
1066 (setq major-mode 'metapost-mode)
1067
1068 ;; Set defaults for completion function. 1027 ;; Set defaults for completion function.
1069 (make-local-variable 'meta-symbol-list) 1028 (set (make-local-variable 'meta-symbol-list) nil)
1070 (make-local-variable 'meta-symbol-changed) 1029 (set (make-local-variable 'meta-symbol-changed) nil)
1071 (make-local-variable 'meta-complete-list)
1072 (setq meta-symbol-list nil)
1073 (setq meta-symbol-changed nil)
1074 (apply 'meta-add-symbols metapost-symbol-list) 1030 (apply 'meta-add-symbols metapost-symbol-list)
1075 (setq meta-complete-list 1031 (set (make-local-variable 'meta-complete-list)
1076 (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list) 1032 (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list)
1077 (list "" 'ispell-complete-word))) 1033 (list "" 'ispell-complete-word))))
1078 (run-mode-hooks 'meta-common-mode-hook 'metapost-mode-hook))
1079 1034
1080 1035
1081 ;;; Just in case ... 1036 ;;; Just in case ...
1082 1037
1083 (provide 'meta-mode) 1038 (provide 'meta-mode)