Ticket #162 (assigned 不具合)

Opened 3 years ago

Last modified 8 months ago

completionの絞込み動作がおかしい

Reported by: gotoh Assigned to: gotoh (accepted)
Priority: major Milestone: ver 3.00
Component: Emacs Lisp Version: 3.00 (開発中)
Keywords: Cc:

Description

これはmeadow独自の症状かどうか確認できていませんが、記録しておきます。

M-C-iなどによる補完(completion)の際に、別バッファにて候補が出ますが、 この候補の絞込み動作が従来と違っているところがあります。 確認したのは*scratch*バッファによるlispコードの補完です。 以下に再現手順:

  1. meadow -qで起動する
  2. (lisp- まで打ってM-C-iで補完すると別バッファに候補が得られます。
  3. 続けて(lisp-ind まで打ち込んでM-C-iすると (lisp-indent-まで完成します。
  4. そのまま続けてもう一度M-C-iしても、候補が減りません。ここが問題。 従来はこの操作で絞込みが行えています。UNIXのemacs-21.4で確認済み。meadow 3だとダメ。 UNIX上でのemacs cvs-headは試せる環境がないため未確認。
  5. しかし、M-C-i以外のキー操作、たとえばC-eなどを行ってからM-C-iすると期待通りの 絞込みまれた候補に更新されます。

Attachments

lisp-complete-symbol.patch (1.7 kB) - added by fujii on 2005年09月19日 20時25分56秒.
lisp-complete-symbol-2.patch (1.8 kB) - added by gotoh on 2005年09月20日 14時38分05秒.
従来の挙動を維持しつつscrollする為の修正案

Change History

2005年09月19日 20時25分56秒 changed by fujii

  • attachment lisp-complete-symbol.patch added.

2005年09月19日 20時28分52秒 changed by fujii

CVS-HEAD では以下のような変更に入っていおり、C-M-i を連打すると候補が表示されているバッファがスクロールするようになっています。

 2002-01-11  Richard M. Stallman  <rms@gnu.org>
 (snip)
 	* emacs-lisp/lisp.el (lisp-complete-symbol): Repeating the command
 	after displaying a completion list scrolls the list.

で、従来の動作では (lisp-ind から (lisp-indent- の補完と、補完候補の表示の更新で 2 回のコマンドが必要になります。ですので、上記の変更が入ると絞り込み表示をすべき 2 回目のコマンド実行においてスクロールが実行され、補完候補の更新されなくなります。

なので、添付したパッチのように (lisp-ind から (lisp-indent- の補完と候補表示の更新を一回の C-M-i で終了させるようにするのが良いのではないでしょうか。

2005年09月20日 14時38分05秒 changed by gotoh

  • attachment lisp-complete-symbol-2.patch added.

従来の挙動を維持しつつscrollする為の修正案

2005年09月20日 14時42分18秒 changed by gotoh

  • owner set to gotoh.
  • status changed from new to assigned.
  • milestone set to ver 3.00.

それもひとつの解だと思いますが、 (lisp-ind から (lisp-indent- への補完で必ず 候補バッファが作成/表示されてしまうのは、 補完を常用する人にとって不快ではないでしょうか。 すくなくとも従来はその操作では補完バッファは現れないので。

以前の補完動作の挙動に合わせつつ、scrollを実現するなら、 現在のように単に補完コマンドが連続した場合にscrollするのではなく、 候補バッファのpatternと同一のpatternでの2回目以降のC-M-i操作で スクロールするようにするといいのではないかと思う。 つまり、冒頭のscroll処理に入る条件に、候補バッファ作成時のパターンと現在のパターンが 一致するかどうかの判定を加えるということ。

そういうパッチを作ってみた。 (see lisp-complete-symbol-2.patch)

2005年09月20日 21時59分19秒 changed by fujii

私も最初は後藤さんのパッチのような修正を考えたのですが、私は補完候補が複数存在する場合には常に何らかの表示をしてほしいので、結局文字列挿入と候補リスト表示を同時に行なうよう修正しました。

2005年09月20日 23時06分02秒 changed by gotoh

両者の中間の仕様もアリかもしれません。 動作を継承しつつ、 補完候補バッファが存在(window-live-p)すれば更新するが、 そうでなければバッファはポップアップは2度目で行う、というもの。

# 本当はさらにsole completion でpopupが閉じてくれるともっと良いのだが。

いずれにせよ、これは本家Emacsでも存在する問題(要確認)だと思うので、 mule-jaに投げて判断をしてもらおうかと思ってます。

2008年04月07日 21時04分41秒 changed by fujii

Meadow 3.01-dev では標記の問題はなくなっています。 おそらく、下記の変更(および関連する変更)が効いているものと思われます。

2005-12-10  Kevin Rodgers  <ihs_4664@yahoo.com>  (tiny change)

	* emacs-lisp/lisp.el (lisp-complete-symbol): Regenerate the
	completion list, even after a partial completion has been
	inserted in the current buffer.  If there are more than 1
	completion, redisplay the *Completions* buffer; if the
	completion is unique, delete the *Completions* window.

Add/Change #162 (completionの絞込み動作がおかしい)




Change Properties
Action