でタブでインデント

こう書くと「TAB」を押したときにインデントにとられそうですね。
ではなく、インデントが、

        • -

public class hoge {
\tpublic static void main(String[] argv) {

        • -

って事です。
これも、今の仕事の標準なんですな。
俺は今までインデントはずっと空白だったんで、
気持ち悪いです。


昔、同じようにタブでインデントが簡単に出来た気がしてたんですが、
なんか調べてもうまくいかなかったんで、
$XYZZYHOME/lisp/c-mode.l、
$XYZZYHOME/lisp/java.l
を見て、.xyzzy に以下のように書いて、
相当力技でとりあえずタブでインデントできるようにしました。
「動けばいい」レベルなので、
明らかに無駄な部分とかがあるので、
週末には直したいなー。

#.xyzzy の内容は会社にあるので、
#あとで書きまふ。

#2/24 追加
(add-hook 'ed::*java-mode-hook*
#'(lambda ()
(setq mode-specific-indent-command 'java-indent-line)
(setq comment-indent-function 'java-comment-indent)))

(setq indent-tabs-mode t)
(define-key *java-mode-map* #\TAB 'java-indent-line)
(define-key *java-mode-map* #\RET 'java-newline-and-indent)
(define-key *java-mode-map* #\{ 'java-electric-insert)
(define-key *java-mode-map* #\: 'java-electric-insert)
(define-key *java-mode-map* #\# 'java-electric-insert)
(define-key *java-mode-map* #\} 'java-electric-close)

(defun java-indent-line ()
(interactive "*")
(if (or (not (interactive-p))
*c-tab-always-indent*
(save-excursion
(skip-chars-backward " \t")
(bolp)))
(case (save-excursion
(goto-bol)
(parse-point-syntax))
(:string)
(:comment
(let *1
t)

(setq java-comment-indent-variable 'java-comment-indent)
(defun calc-java-comment-indent ()
(save-excursion
(goto-bol)
(skip-chars-forward " \t")
(let *2
(scan-buffer "/*" :reverse t))
(while (and (eq (parse-point-syntax) ':comment)
(scan-buffer "/*" :reverse t :no-dup t)))
(+ (current-column)
(if eolp
(if (symbolp java-comment-indent-variable)
(symbol-value java-comment-indent-variable)
0)
0))))))

(defun java-smart-indentation (column iscomment)
(let *3 oend beg end)
(save-excursion
(setq beg (progn (goto-bol) (point)))
(setq end (progn (skip-chars-forward " \t") (point)))
(setq oend end)
(when t
(delete-region beg end)
; (indent-to column)

(setq column (/ column (tab-columns)))

(dotimes (i column)
(insert "\t")
)
(if iscomment
(insert " "))
(setq end (point))))

(and (<= opoint oend) (goto-char end))
t))

(defun java-newline-and-indent (&optional (arg 1))
(interactive "*p")
(delete-trailing-spaces)
(insert #\LFD arg)
(java-indent-line))

(defun java-electric-insert (&optional (arg 1))
(interactive "*p")
(unless (prog1
(parse-point-syntax)
(self-insert-command arg))
(java-indent-line))
t)

(defun java-electric-close (&optional (arg 1))
(interactive "*p")
(unless (prog1
(parse-point-syntax)
(self-insert-command arg))
(java-indent-line))
(save-excursion
(forward-char -1)
(and (goto-matched-parenthesis)
(ed::show-matched-parenthesis)))
t)

(defun indent-current-buffer ()
(interactive)
(indent-region (point-min) (point-max)))

*1:column (calc-java-comment-indent))) (when (integerp column) (java-smart-indentation column t))) ) (t (let ((column (ed::calc-c-indent))) (when (integerp column) (java-smart-indentation column nil))))) (insert "\t"

*2:eolp (eolp))) (when (and (or eolp (looking-for "*"

*3:opoint (point