Mercurial > emacs
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 |
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 | 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 | 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 | 10 ;; This file is part of GNU Emacs. |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
869 | 14 ;; the Free Software Foundation; either version 2, or (at your option) |
473 | 15 ;; any later version. |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64085 | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
25 ;; Boston, MA 02110-1301, USA. | |
473 | 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 | 30 ;; inspired by an earlier asm-mode by Martin Neitzel. |
31 | |
32 ;; This minor mode is based on text mode. It defines a private abbrev table | |
33 ;; that can be used to save abbrevs for assembler mnemonics. It binds just | |
34 ;; five keys: | |
35 ;; | |
36 ;; TAB tab to next tab stop | |
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 | 42 ;; C-j, C-m newline and tab to tab stop |
43 ;; | |
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 | 46 ;; This mode runs two hooks: |
11098 | 47 ;; 1) An asm-mode-set-comment-hook before the part of the initialization |
473 | 48 ;; depending on asm-comment-char, and |
49 ;; 2) an asm-mode-hook at the end of initialization. | |
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 | 53 (defgroup asm nil |
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 | 56 :group 'languages) |
57 | |
23312 | 58 (defcustom asm-comment-char ?\; |
20781 | 59 "*The comment-start character assumed by Asm mode." |
60 :type 'character | |
61 :group 'asm) | |
473 | 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 | 69 "Syntax table used while in Asm mode.") |
473 | 70 |
71 (defvar asm-mode-abbrev-table nil | |
2670 | 72 "Abbrev table used while in Asm mode.") |
473 | 73 (define-abbrev-table 'asm-mode-abbrev-table ()) |
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 | 83 "Keymap for Asm mode.") |
473 | 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 | 102 ;;;###autoload |
103 (defun asm-mode () | |
104 "Major mode for editing typical assembler code. | |
2670 | 105 Features a private abbrev table and the following bindings: |
473 | 106 |
107 \\[asm-colon]\toutdent a preceding label, tab to next tab stop. | |
108 \\[tab-to-tab-stop]\ttab to next tab stop. | |
109 \\[asm-newline]\tnewline, then tab to next tab stop. | |
110 \\[asm-comment]\tsmart placement of assembler comments. | |
111 | |
112 The character used for making comments is set by the variable | |
23312 | 113 `asm-comment-char' (which defaults to `?\\;'). |
473 | 114 |
11098 | 115 Alternatively, you may set this variable in `asm-mode-set-comment-hook', |
116 which is called near the beginning of mode initialization. | |
473 | 117 |
2670 | 118 Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization. |
473 | 119 |
6469 | 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 | 122 (interactive) |
123 (kill-all-local-variables) | |
124 (setq mode-name "Assembler") | |
125 (setq major-mode 'asm-mode) | |
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 | 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 | 149 (make-local-variable 'comment-end) |
150 (setq comment-end "") | |
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 | 180 (defun asm-colon () |
181 "Insert a colon; if it follows a label, delete the label's indentation." | |
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 | 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 | 195 |
196 (defun asm-comment () | |
197 "Convert an empty comment to a `larger' kind, or start a new one. | |
198 These are the known comment classes: | |
199 | |
200 1 -- comment to the right of the code (at the comment-column) | |
201 2 -- comment on its own line, indented like code | |
202 3 -- comment on its own line, beginning at the left-most column. | |
203 | |
204 Suggested usage: while writing your code, trigger asm-comment | |
205 repeatedly until you are satisfied with the kind of comment." | |
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 | 215 (cond |
216 | |
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 | 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 | 226 (indent-for-comment)) |
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 | 230 (insert asm-comment-char)) |
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 | 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 | 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 | 245 |
18383 | 246 (provide 'asm-mode) |
247 | |
52401 | 248 ;;; arch-tag: 210e695f-f338-4376-8913-a4c5c72ac848 |
473 | 249 ;;; asm-mode.el ends here |