auto-completeをforkしてみた
http://github.com/buzztaiki/auto-complete
とりあえずの目標は
- 候補が多いときにanythingで補完する機能のサポート
- 個人的に使いそうなsourceの追加
あたりで。
追記
tomoya 元々、anything による絞り込みは ac-anything.el というのがあったけど、開発版では pulldown.el を使うようになったので、動作しない。http://d.hatena.ne.jp/rubikitch/20090210/auto_complete_anything 2009/11/11
あー、やっぱりあったのか。ある程度作っちゃったけど名前もかぶるし、ac-anythingを元にするかなぁ。
posn-at-point
posn-at-pointとposn-col-rowを使うと画面で表示されてるcolとかrowがとれるんだけどクソ重い。
vline.elをorgとかoutlineみたいにinvisible propertyがあっても大丈夫にするのに使おうと思ってたんだけど、これじゃ使い物にならないかもしれない。
next-single-char-property-changeとかでなんとかなるかなぁ。org対応させたいなぁ。
vline.elを更新したよ。
ものすごく久しぶりに。変更点は以下。
- window幅を越えて行末を広げないように
- 物理行(visual-line)のハイライトに対応。
ものは EmacsWikiからどぞ。
http://www.emacswiki.org/emacs/download/vline.el
この手のことをやるときは posn-at-point とその周辺関数が便利だった。
emacsの継続行の扱い
vlineで継続行まわりを変えようとしてて微妙にはまってるんでメモ。
# 行末処理といってもlonglinesとかvisual-line-modeで日本語を扱おうとかそういう話じゃないです。そっちもやりたいけど禁則まわりとかfill.elみてもようわからんです。むずかしい。
で、以下めも。
overflow-newline-into-fringe が non-nil だと
- 行の最後が改行で改行だけはみでる場合
- ちょうどwindowの幅と行のカラム数が一緒の場合
のどっちかの場合にカーソルが fringe にめりこむ。
(with-current-buffer (get-buffer-create "*hoge*") (display-buffer (current-buffer)) (let ((w (get-buffer-window (current-buffer)))I) (erase-buffer) (setq truncate-lines nil) (save-excursion (insert (make-string (window-width w) ?x))) (set-window-point w (line-end-position))))
はみでた直後の文字が全角文字で、はみでる前の行の半角での文字数がwindowsの幅-1の場合に、表示上のカラムと current-column がずれる(これって前からだったかな?前は違ったような)。
(with-current-buffer (get-buffer-create "*hoge*") (display-buffer (current-buffer)) (let ((w (get-buffer-window (current-buffer)))I) (erase-buffer) (setq truncate-lines nil) (save-excursion (insert (make-string (1- (window-width w)) ?x) "あx\n") (insert (make-string (window-width w) ?x) "あx\n")) (save-excursion (loop until (eobp) collect (prog1 (progn (end-of-line) (current-column)) (forward-line))))))
Emacsの内部コードがunicodeになったことを感じる一瞬
emacs23でこんなんを書くと
(char-to-string ?\x3042)
こんなんなる
"あ"
Unicode一覧 3000-3FFF - Wikipediaとか参考。
あと、ucs-insertの実装が単純にinsert-and-inherit呼ぶだけになってたり。emacs22のころはdecode-charしてた。