Emacs ハック。

あいあい。大風呂敷を広げちゃいましたね感たっぷりてんこ盛りの
whitypig です。
エアコンをつけないと空気が冷たくなり,空気が冷たいと,偏頭痛持ちのワタシの頭は,
調子がよくなるので,エアコンをつけないでいたら,風邪引いた。orz
と,やってることが小学生並な感じです。

M-f ではまかないきれない!!

public void somefunc() {
// ...
}

なんてのがあって,somefunc -> someFunc にしたい場合,
今までなら,somefunc の前まで行って,C-f をタタタタとしていたわけですが,
よくよく考えたら,C-uC-f すれば,4つ進むね。C-8C-f なら8つと。
M-f だと通過しちゃうので,C-f を手動で打っていたのですが,universal argument だっけ?
を使えば楽になるよー,という,オレ以外の Emacs 系ユーザーなら知ってそうな
話でした。


もちのろんで,C-uC-b, C-uM-f,
さらには,C-uM-b なんていう応用技(どこがやねん!!)もできる。
これを覚えてから,移動がさらに快適になり,おかげでたばこもやめられました。
(もとからたばこ吸いませんけど)

ついでなんで,c-mode の auto-complete-mode 設定。

これ,やってなかったので,やった。

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook-func)

(defun my-c-indent-line (&optional syntax quiet ignore-point-pos)
  (interactive)
  (c-indent-line syntax quiet ignore-point-pos))

;;; function to be called in cc-mode when auto-complete is enabled
(defun my-c-mode-common-hook-func ()
  (interactive)
  "Function to be called when entering into cc-mode."
  (c-set-style "stroustrup")
  (setq c-basic-offset 2)
  (setq tab-width 2)
  (setq indent-tabs-mode nil)
  (local-set-key "\t" 'my-c-indent-line)
  (setq compilation-window-height 10) ;; the height in lines of *compilation buffer*
  (local-set-key "\M-I" 'imenu)
  (local-set-key "\C-c\C-c" 'smart-compile)
  (make-variable-buffer-local 'skeleton-pair)
  (make-variable-buffer-local 'skeleton-pair-on-word)
  (setq skeleton-pair-on-word t)
  (setq skeleton-pair t)
  (make-variable-buffer-local 'skeleton-pair-alist)
  (local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "[") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
  (gtags-mode 1)
  ;; この下を追加しました。
  (set (make-local-variable 'dabbrev-check-all-buffers) nil)
  (set (make-local-variable 'dabbrev-select-buffers-function)
       'my-dabbrev-select-c-mode-buffers)
  (when (require 'auto-complete nil t)
    (auto-complete-mode t)
    (make-local-variable 'ac-sources)
    (setq ac-auto-start 3)
    (setq ac-sources '(ac-source-words-in-buffer
                       ac-source-gtags
                       ac-source-dabbrev
                       ac-source-abbrev))))

;; dynamic abbreviation の補完もとバッファを集める関数
(defun my-dabbrev-select-c-mode-buffers ()
  "Return a list of buffers opened with cc-mode."
  (interactive)
  (let (b l (bl (buffer-list)))
    (dolist (elt bl)
      (save-excursion
        (set-buffer elt)
        (when (memq major-mode '(c-mode c++-mode))
          (setq l (cons elt l)))))
    l))

C-j の挙動

newline-and-indent にしているけど,

void func()//ここで C-j すると・・・,

void func()
  ■ここにくる。

void func()
■ここに来て欲しい

結論から言うと,C-m しろということですわ。
ま,newline-and-indent だから当然といえば当然ですね。
でも,これ,結構わすれて C-j しちゃうんですよ。


以上,どこが Emacs ハックやねん! のコーナーでした。