9

auto-complete-modeは完全に素晴らしいと思うものを使用しています。私も大ファンですlinum-modeが、2 つを一緒に使用すると、特に新しいバッファー (または行数が非常に少ないバッファー) で作業しているときに、非常にイライラする問題があります。

基本的に、バッファーは 'x' 行の長さですが、オートコンプリートが開始されるとバッファーに行が「追加」されるため、たとえば、補完を示唆しているlinum-modeかどうかに応じて、行番号を 1 列または 2 列に表示するように切り替え続けます。auto-completeか否か。

したがって、文を入力すると、キーを押すたびにバッファーの内容が左から右に必死にシフトするのがわかります。それは本当に迷惑です。

解決策にはlinum-format変数の構成が含まれると思いますが、方法がわかりません。

理想的には、私のlinum-formatが次の場合は素晴らしいでしょう:

  • 動的
  • 右揃え
  • バッファに実際にあるものよりも多くの行がバッファにあることを考慮して

私の理論的根拠はauto-complete、「y」以上の提案を示唆してはならず、したがって、2 つがうまく連携し始めるということです。

たとえば、'y' が 20 に設定されていて、バッファーに 75 行ある場合、linum は 2 つの列を使用する必要があります。これは、どこにauto-completeいてもバッファーを 99 行より「大きく」しないためです。

逆に、'y' がまだ 20 に設定されていて、バッファーに 95 行ある場合linumは、3 列を使用する必要がauto-completeあります。入力するとき。

の「3列幅」をハードコーディングしたくありませんlinum

「動的だが常に少なくとも2つの列」を使用すると、ほとんどの煩わしさが何とか解決されると思いますが、それでも私が説明したようなものは素晴らしいでしょう.

PS:私の「修正」は、linumが常に少なくとも2列に表示されることを意味することを認識しています。それで問題ありません...右揃えのままで、状況に応じて2、3、または4列を使用する限り必要なもの。

4

4 に答える 4

3

linum-mode出力の変更に関する以前の回答をいくつか書きましたが、これはおそらく目的に適合させることができます。

編集:これがそのコードの最も基本的なバージョンです(EmacsWikiにもありますが、多少埋もれていますが)。これはデフォルトの出力をまったく変更しませんが、他の回答の手法を使用してデフォルトのコードよりも効率的です。それはおそらくあなたにとってより有用な出発点です。

(defvar my-linum-format-string "%4d")

(add-hook 'linum-before-numbering-hook 'my-linum-get-format-string)

(defun my-linum-get-format-string ()
  (let* ((width (length (number-to-string
                         (count-lines (point-min) (point-max)))))
         (format (concat "%" (number-to-string width) "d")))
    (setq my-linum-format-string format)))

(setq linum-format 'my-linum-format)

(defun my-linum-format (line-number)
  (propertize (format my-linum-format-string line-number) 'face 'linum))
于 2012-07-15T22:32:48.850 に答える
2

「ソースにパッチを当てる」を見た後、同じ問題が発生しましたadvice。これが私が思いついたものです

(defadvice linum-update
  (around tung/suppress-linum-update-when-popup activate)
  (unless (ac-menu-live-p)
    ad-do-it))

前述のように使用したいpopup-live-pのですが、残念ながら、事前に知ることができなかったポップアップの変数が必要です。

于 2012-09-14T13:44:17.480 に答える
1

更新: 最終的に、linum.el のソースにパッチを当てました。更新前に実行される追加のフックを追加しました。

パッチを適用したファイルは次のとおりです: linum.el (github)

init.el にあるコードは次のとおりです。

;; Load custom linum.
(load-file "~/.emacs.d/linum.el")

;; Suppress line number updates while auto-complete window
;; is displayed.
(add-hook 'linum-before-update-hook
          '(lambda ()
             (when auto-complete-mode
               (if (ac-menu-live-p)
                   (setq linum-suppress-updates t)
                 (setq linum-suppress-updates nil)))))

それが役に立てば幸い!

于 2012-09-01T04:05:08.910 に答える