annotate lisp/progmodes/asm-mode.el @ 69478:e8bb5df2ba7a

Add index entries around each paragraph rather than depend on entries from beginning of node. Doing so ensures that index entries are less likely to be forgotten if text is cut and pasted, and are necessary anyway if the references are on a separate page. It seems that makeinfo is now (v. 4.8) only producing one index entry per node, so there is no longer any excuse not to. Use subheading instead of heading. The incorrect use of heading produced very large fonts in Info--as large as the main heading. (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6 and 7 appeared *around* the time of these Emacs releases.
author Bill Wohler <wohler@newt.com>
date Wed, 15 Mar 2006 00:26:12 +0000
parents dc49655f57ae
children 3f695578124f 4b3d39451150
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
1 ;;; asm-mode.el --- mode for editing assembler code
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
2
68773
dc49655f57ae Update copyright for 2006.
Nick Roberts <nickrob@snap.net.nz>
parents: 68134
diff changeset
3 ;; Copyright (C) 1991, 2001, 2002, 2003, 2004, 2005, 2006
64699
629afbe74e61 Update copyright for release of 22.1 for progmodes directory.
Nick Roberts <nickrob@snap.net.nz>
parents: 64394
diff changeset
4 ;; Free Software Foundation, Inc.
869
7861f8756850 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 810
diff changeset
5
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
6 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
11098
03b481b6cec2 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9472
diff changeset
7 ;; Maintainer: FSF
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
8 ;; Keywords: tools, languages
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
9
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
869
7861f8756850 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 810
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; any later version.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 11105
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
25 ;; Boston, MA 02110-1301, USA.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
27 ;;; Commentary:
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
28
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
29 ;; This mode was written by Eric S. Raymond <esr@snark.thyrsus.com>,
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 ;; inspired by an earlier asm-mode by Martin Neitzel.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 ;; This minor mode is based on text mode. It defines a private abbrev table
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 ;; that can be used to save abbrevs for assembler mnemonics. It binds just
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 ;; five keys:
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;;
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 ;; TAB tab to next tab stop
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 ;; : outdent preceding label, tab to tab stop
11105
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
38 ;; comment char place or move comment
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
39 ;; asm-comment-char specifies which character this is;
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
40 ;; you can use a different character in different
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
41 ;; Asm mode buffers.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 ;; C-j, C-m newline and tab to tab stop
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ;;
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 ;; Code is indented to the first tab stop level.
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
45
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ;; This mode runs two hooks:
11098
03b481b6cec2 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9472
diff changeset
47 ;; 1) An asm-mode-set-comment-hook before the part of the initialization
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 ;; depending on asm-comment-char, and
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 ;; 2) an asm-mode-hook at the end of initialization.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
51 ;;; Code:
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 803
diff changeset
52
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
53 (defgroup asm nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
54 "Mode for editing assembler code."
66963
a11fdee52c05 Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
55 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
56 :group 'languages)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
57
23312
6f7f0f3876e3 (asm-mode): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20781
diff changeset
58 (defcustom asm-comment-char ?\;
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
59 "*The comment-start character assumed by Asm mode."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
60 :type 'character
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 18383
diff changeset
61 :group 'asm)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
63 (defvar asm-mode-syntax-table
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
64 (let ((st (make-syntax-table)))
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
65 (modify-syntax-entry ?\n ">" st)
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
66 (modify-syntax-entry ?/ ". 14b" st)
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
67 (modify-syntax-entry ?* ". 23b" st)
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
68 st)
2670
7c9deb765a64 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 869
diff changeset
69 "Syntax table used while in Asm mode.")
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 (defvar asm-mode-abbrev-table nil
2670
7c9deb765a64 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 869
diff changeset
72 "Abbrev table used while in Asm mode.")
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 (define-abbrev-table 'asm-mode-abbrev-table ())
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
75 (defvar asm-mode-map
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
76 (let ((map (make-sparse-keymap)))
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
77 ;; Note that the comment character isn't set up until asm-mode is called.
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
78 (define-key map ":" 'asm-colon)
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
79 (define-key map "\C-c;" 'comment-region)
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
80 (define-key map "\C-j" 'newline-and-indent)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
81 (define-key map "\C-m" 'newline-and-indent)
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
82 map)
2670
7c9deb765a64 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 869
diff changeset
83 "Keymap for Asm mode.")
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84
9385
297f0781c8ae (asm-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7384
diff changeset
85 (defconst asm-font-lock-keywords
68134
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
86 (append
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
87 '(("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?[ \t]*\\(\\sw+\\(\\.\\sw+\\)*\\)?"
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
88 (1 font-lock-function-name-face) (3 font-lock-keyword-face nil t))
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
89 ;; label started from ".".
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
90 ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>:"
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
91 1 font-lock-function-name-face)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
92 ("^\\((\\sw+)\\)?\\s +\\(\\(\\.?\\sw\\|\\s_\\)+\\(\\.\\sw+\\)*\\)"
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
93 2 font-lock-keyword-face)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
94 ;; directive started from ".".
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
95 ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>[^:]?"
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
96 1 font-lock-keyword-face)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
97 ;; %register
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
98 ("%\\sw+" . font-lock-variable-name-face))
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
99 cpp-font-lock-keywords)
48bf79d0aede 2006-01-06 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents: 66963
diff changeset
100 "Additional expressions to highlight in Assembler mode.")
9385
297f0781c8ae (asm-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7384
diff changeset
101
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 (defun asm-mode ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 "Major mode for editing typical assembler code.
2670
7c9deb765a64 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 869
diff changeset
105 Features a private abbrev table and the following bindings:
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 \\[asm-colon]\toutdent a preceding label, tab to next tab stop.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 \\[tab-to-tab-stop]\ttab to next tab stop.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 \\[asm-newline]\tnewline, then tab to next tab stop.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 \\[asm-comment]\tsmart placement of assembler comments.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 The character used for making comments is set by the variable
23312
6f7f0f3876e3 (asm-mode): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20781
diff changeset
113 `asm-comment-char' (which defaults to `?\\;').
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114
11098
03b481b6cec2 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9472
diff changeset
115 Alternatively, you may set this variable in `asm-mode-set-comment-hook',
03b481b6cec2 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9472
diff changeset
116 which is called near the beginning of mode initialization.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117
2670
7c9deb765a64 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 869
diff changeset
118 Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119
6469
4cf30ff89a5e (asm-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5268
diff changeset
120 Special commands:
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
121 \\{asm-mode-map}"
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 (kill-all-local-variables)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 (setq mode-name "Assembler")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (setq major-mode 'asm-mode)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 (setq local-abbrev-table asm-mode-abbrev-table)
9472
06623e3543db * asm-mode.el: (asm-mode): Set font-lock-defaults.
Simon Marshall <simon@gnu.org>
parents: 9385
diff changeset
127 (make-local-variable 'font-lock-defaults)
06623e3543db * asm-mode.el: (asm-mode): Set font-lock-defaults.
Simon Marshall <simon@gnu.org>
parents: 9385
diff changeset
128 (setq font-lock-defaults '(asm-font-lock-keywords))
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
129 (set (make-local-variable 'indent-line-function) 'asm-indent-line)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
130 ;; Stay closer to the old TAB behavior (was tab-to-tab-stop).
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
131 (set (make-local-variable 'tab-always-indent) nil)
11105
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
132
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 (run-hooks 'asm-mode-set-comment-hook)
11105
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
134 ;; Make our own local child of asm-mode-map
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
135 ;; so we can define our own comment character.
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
136 (use-local-map (nconc (make-sparse-keymap) asm-mode-map))
8963d6de6f07 (asm-mode): Make a per-buffer child keymap here.
Richard M. Stallman <rms@gnu.org>
parents: 11098
diff changeset
137 (local-set-key (vector asm-comment-char) 'asm-comment)
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
138 (set-syntax-table (make-syntax-table asm-mode-syntax-table))
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
139 (modify-syntax-entry asm-comment-char "<")
49402
99a31f21f1c9 (asm-mode): Added syntax table entries for /* */ comments.
Juanma Barranquero <lekktu@gmail.com>
parents: 31983
diff changeset
140
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
141 (make-local-variable 'comment-start)
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
142 (setq comment-start (string asm-comment-char))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
143 (make-local-variable 'comment-add)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
144 (setq comment-add 1)
50397
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
145 (make-local-variable 'comment-start-skip)
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
146 (setq comment-start-skip "\\(?:\\s<+\\|/\\*+\\)[ \t]*")
a3e1934e4ead (asm-mode-syntax-table): Setup entries that do not depend on asm-comment-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50352
diff changeset
147 (make-local-variable 'comment-end-skip)
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
148 (setq comment-end-skip "[ \t]*\\(\\s>\\|\\*+/\\)")
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 (make-local-variable 'comment-end)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 (setq comment-end "")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 (setq fill-prefix "\t")
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
152 (run-mode-hooks 'asm-mode-hook))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
153
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
154 (defun asm-indent-line ()
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
155 "Auto-indent the current line."
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
156 (interactive)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
157 (let* ((savep (point))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
158 (indent (condition-case nil
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
159 (save-excursion
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
160 (forward-line 0)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
161 (skip-chars-forward " \t")
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
162 (if (>= (point) savep) (setq savep nil))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
163 (max (asm-calculate-indentation) 0))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
164 (error 0))))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
165 (if savep
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
166 (save-excursion (indent-line-to indent))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
167 (indent-line-to indent))))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
168
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
169 (defun asm-calculate-indentation ()
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
170 (or
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
171 ;; Flush labels to the left margin.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
172 (and (looking-at "\\(\\sw\\|\\s_\\)+:") 0)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
173 ;; Same thing for `;;;' comments.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
174 (and (looking-at "\\s<\\s<\\s<") 0)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
175 ;; Simple `;' comments go to the comment-column.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
176 (and (looking-at "\\s<\\(\\S<\\|\\'\\)") comment-column)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
177 ;; The rest goes at the first tab stop.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
178 (or (car tab-stop-list) tab-width)))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
179
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 (defun asm-colon ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 "Insert a colon; if it follows a label, delete the label's indentation."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 (interactive)
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
183 (let ((labelp nil))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
184 (save-excursion
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
185 (skip-syntax-backward "w_")
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
186 (skip-syntax-backward " ")
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
187 (if (setq labelp (bolp)) (delete-horizontal-space)))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
188 (call-interactively 'self-insert-command)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
189 (when labelp
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
190 (delete-horizontal-space)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
191 (tab-to-tab-stop))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 57662
diff changeset
193 ;; Obsolete since Emacs-22.1.
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
194 (defalias 'asm-newline 'newline-and-indent)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 (defun asm-comment ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 "Convert an empty comment to a `larger' kind, or start a new one.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 These are the known comment classes:
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 1 -- comment to the right of the code (at the comment-column)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 2 -- comment on its own line, indented like code
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 3 -- comment on its own line, beginning at the left-most column.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 Suggested usage: while writing your code, trigger asm-comment
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 repeatedly until you are satisfied with the kind of comment."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (interactive)
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
207 (comment-normalize-vars)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
208 (let (comempty comment)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
209 (save-excursion
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
210 (beginning-of-line)
64394
f0ee06ae643c (asm-comment): Use with-no-warnings.
Richard M. Stallman <rms@gnu.org>
parents: 64085
diff changeset
211 (with-no-warnings
f0ee06ae643c (asm-comment): Use with-no-warnings.
Richard M. Stallman <rms@gnu.org>
parents: 64085
diff changeset
212 (setq comment (comment-search-forward (line-end-position) t)))
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
213 (setq comempty (looking-at "[ \t]*$")))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
214
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 (cond
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 ;; Blank line? Then start comment at code indent level.
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
218 ;; Just like `comment-dwim'. -stef
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
219 ((save-excursion (beginning-of-line) (looking-at "^[ \t]*$"))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
220 (indent-according-to-mode)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
221 (insert asm-comment-char asm-comment-char ?\ ))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
223 ;; Nonblank line w/o comment => start a comment at comment-column.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
224 ;; Also: point before the comment => jump inside.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
225 ((or (null comment) (< (point) comment))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 (indent-for-comment))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
228 ;; Flush-left or non-empty comment present => just insert character.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
229 ((or (not comempty) (save-excursion (goto-char comment) (bolp)))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 (insert asm-comment-char))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
232 ;; Empty code-level comment => upgrade to next comment level.
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
233 ((save-excursion (goto-char comment) (skip-chars-backward " \t") (bolp))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
234 (goto-char comment)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
235 (insert asm-comment-char)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
236 (indent-for-comment))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
238 ;; Empty comment ends non-empty code line => new comment above.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (t
50401
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
240 (goto-char comment)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
241 (skip-chars-backward " \t")
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
242 (delete-region (point) (line-end-position))
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
243 (beginning-of-line) (insert "\n") (backward-char)
465c72f54419 (asm-calculate-indentation, asm-indent-line): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50397
diff changeset
244 (asm-comment)))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 15481
diff changeset
246 (provide 'asm-mode)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 15481
diff changeset
247
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51655
diff changeset
248 ;;; arch-tag: 210e695f-f338-4376-8913-a4c5c72ac848
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 ;;; asm-mode.el ends here