Skip to content
2010/03/28 / highmt

let org-mode/orgtbl-mode coexist with auto-complete-mode

org-mode 6.21b + auto-complete 1.2 でorgtbl-modeを使っていて、
ac-startしてもTABキーやReturnキーで補完を確定できなかったので、
いろいろフックを入れて(ac-start前後でマイナーモードを変えたりとかして)回避していたのだけれど、
そんなにがんばらなくても

(setq ac-use-overriding-local-map t)

でいけるっぽい。(マニュアルには極力使うなって書いてあるけど。)
overriding-local-mapなんてものがあるなんて知らなかった。

ただし、自分の環境(GNU Emacs 23.1.1 (i386-mingw-nt6.0.6002))では、
ac-start後、overriding-terminal-local-mapが変更されているにもかかわらず、
最初のキーは依然としてoverriding-terminal-local-mapが使用されない、という現象が起きていた。

(ac-activate-completing-map)を(run-with-idle-timer経由ではなく)ac-start内で明示的に呼ぶ
(たとえば(ac-set-timer)の前あたりとか)ようにするとうまくいくっぽい。
なんか問題起きそうな気がものすごくするが、ひとまず様子見。

ついでに、orgtbl-modeをoptimizedで使っていて、
orgのtableで日本語入れたときに崩れないようにするパッチを適用した後、
日本語を既存フィールドに追加入力したときTABキーでの整形がおかしくなる問題の回避。

(defun orgtbl-self-insert-command (N)
;; ...
  (if (and (org-at-table-p)
;; ...
           (< last-input-event 256) ; add this
           (looking-at "[^|\n]*  +|"))
;; ...
(defun org-self-insert-command (N)
;; ...
  (if (and (org-table-p)
;; ...
           (< last-input-event 256) ; add this
           (looking-at "[^|\n]*  |"))(defun orgtbl-self-insert-command (N)
;; ...
(defun org-delete-char (N)
;; ...
  (if (and (org-table-p)
;; ...
           (< (char-after) 256) ; add this
           (eq N 1))
;; ...
(defun org-delete-backward-char (N)
;; ...
  (if (and (org-table-p)
;; ...
           (< (char-before) 256) ; add this
           (looking-at ".*?|"))
;; ...

広告
%d人のブロガーが「いいね」をつけました。