martillo@mit-athena.UUCP (Joaquim Martillo) (02/22/85)
The following elisp file when downloaded into emacs will
make CCA Emacs C-Mode act like Montgomery Emacs C-Mode.
That is in the following example;
{
if(...)
{
......;
......;
}
}
Return will immediately indent number of initial tabs on the previous
line + 1 if the last tab is succeeded by a {.
} will backtab once if preceded by a tab.
(edefun |Close Squiggle Brace| (arg1 arg2 &optional op1 op2 op3)
(cond ((and (equal "C" (#f"& get major mode" #v"& current buffer"))
(eql 1 #v"indent using tabs"))
(cond ((not (#f"& begin line"))
(#f"backward character")
(cond ((eql #\tab (emacs-get-char))
(#f"backward delete character")))))))
(emacs-insert-char #\}))
(#f"set key" noarg 0 "Close Squiggle Brace" "}")
(defun count-tabs ()
(cond ((#f"& end line") 0)
(t (let ((character (emacs-get-char)))
(cond ((eql #\tab character) (+ 1 (count-tabs)))
((eql #\{ character) 1)
(t 0))))))
(edefun |C CRLF| (arg1 arg2 &optional op1 op2 op3)
(cond ((and (equal "C" (#f"& get major mode" #v"& current buffer"))
(eql 1 #v"indent using tabs"))
(let ((current-col (#f"& find real column" #v"& current column")))
(#f"beginning of line")
(let ((count (count-tabs)))
(#f"& move to real column" #v"& current line" current-col)
(#f"CRLF")
(dotimes-pp (i count)
(emacs-insert-char #\tab)))))
(t (#f"CRLF"))))
(#f"set key" noarg 0 "C CRLF" "
")