我想为我的汇编语言编写Emacs的自定义缩进。我写了一个几乎奏效的。
在我的语言中,有以点“.”开头的指令(例如,data.text)、以“:”结尾的标签(例如,消息:x:缓冲区:)和指令(mov eax,$24)。我希望指令和标签向左缩进,指令缩进四个空格。以下是elisp中的函数:
(defun myasm-indent-line ()
"Indent current line as myasm code"
(interactive)
(beginning-of-line)
(save-excursion
(beginning-of-line)
(cond ((bobp) (indent-line-to 0))
((looking-at "[ \t]*\\.[:alnum:]*") (indent-line-to 0))
((looking-at "[ \t]*[:alnum:]*:") (indent-line-to 0))
(t (indent-line-to 4)))))
我测试了
划痕
具有此代码的缓冲区:
(defun foo (s)
(cond ((string-match-p "[ \t]*\\.[:alnum:]*" s) (message "directive"))
((string-match-p "[ \t]*[:alnum:]*:" s) (message "label"))
(t (message "instruction"))))
(foo ".data") ; prints "directive"
(foo "mov eax, 13") ; prints "instruction"
(foo "msg:") ; prints "label"
缩进对于指令和说明是正确的,但对于缩进了四个空格的标签是不正确的。
谢谢你的帮助。