e2wmとcolor-moccurのバッティングをなんとかする(未完成)

e2wmの管理下でcolor-moccurがうまく動かないのでなんとかしてみようという試み。

今回はRET押してもカーソルが正しい位置に動いてくれないのを解消する。原因は推測でしかないけどgoto-lineが動いてないこと。

e2wm-configのadviceだとcolor-moccurがpop-to-bufferしてgoto-lineでカーソル動かしてから他のウィンドウを削除する流れのウィンドウ削除を無効化して、*Moccur*を開いてたウィンドウを削除してメインウィンドウにフォーカスを戻してる。これだと不完全で、selected-windowを消す前にメインウィンドウにselected-windowのバッファを表示しないといけない気がする。ついでに行番号を取得しておいてカーソルを再度移動させてやる。

あと、e2wm管理外の時もadviceが効いてcolor-moccurが使えないのでこれも修正。

以下をinit.elに追記。

(load "e2wm-config")

(defadvice moccur-mode-goto-occurrence (around e2wm:ad-override activate)
  (flet ((delete-other-windows () ))
    ad-do-it )
  (let ((bufname (buffer-name))
        (lineno (line-number-at-pos)))
    (delete-window (selected-window))
    (e2wm:pst-window-select-main)
    (pop-to-buffer bufname)
    (goto-line lineno)))

(ad-deactivate 'moccur-mode-goto-occurrence)

(add-hook 'e2wm-post-start-hook
          '(lambda ()
             (ad-activate 'moccur-mode-goto-occurrence)))

(add-hook 'e2wm-post-stop-hook
          '(lambda ()
             (ad-deactivate 'moccur-mode-goto-occurrence)))