diff options
| -rw-r--r-- | lisp/minibuffer.el | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index cf626b3f32d..8ea70b14f12 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el | |||
| @@ -3056,20 +3056,38 @@ PATTERN is as returned by `completion-pcm--string->pattern'." | |||
| 3056 | (let* ((pos (if point-idx (match-beginning point-idx) (match-end 0))) | 3056 | (let* ((pos (if point-idx (match-beginning point-idx) (match-end 0))) |
| 3057 | (md (match-data)) | 3057 | (md (match-data)) |
| 3058 | (start (pop md)) | 3058 | (start (pop md)) |
| 3059 | (end (pop md))) | 3059 | (end (pop md)) |
| 3060 | (len (length str)) | ||
| 3061 | (score-numerator 0) | ||
| 3062 | (score-denominator 0) | ||
| 3063 | (aux 0) | ||
| 3064 | (update-score | ||
| 3065 | (lambda (a b) | ||
| 3066 | "Update score variables given match range (A B)." | ||
| 3067 | (setq | ||
| 3068 | score-numerator (+ score-numerator (- b a)) | ||
| 3069 | score-denominator (+ score-denominator (expt (- a aux) 1.5)) | ||
| 3070 | aux b)))) | ||
| 3071 | (funcall update-score 0 start) | ||
| 3060 | (while md | 3072 | (while md |
| 3061 | (put-text-property start (pop md) | 3073 | (funcall update-score start (car md)) |
| 3074 | (put-text-property start | ||
| 3075 | (pop md) | ||
| 3062 | 'font-lock-face 'completions-common-part | 3076 | 'font-lock-face 'completions-common-part |
| 3063 | str) | 3077 | str) |
| 3064 | (setq start (pop md))) | 3078 | (setq start (pop md))) |
| 3065 | (put-text-property start end | 3079 | (put-text-property start end |
| 3066 | 'font-lock-face 'completions-common-part | 3080 | 'font-lock-face 'completions-common-part |
| 3067 | str) | 3081 | str) |
| 3082 | (funcall update-score start end) | ||
| 3068 | (if (> (length str) pos) | 3083 | (if (> (length str) pos) |
| 3069 | (put-text-property pos (1+ pos) | 3084 | (put-text-property pos (1+ pos) |
| 3070 | 'font-lock-face 'completions-first-difference | 3085 | 'font-lock-face 'completions-first-difference |
| 3071 | str))) | 3086 | str)) |
| 3072 | str) | 3087 | (put-text-property |
| 3088 | 0 1 'completion-pcm-commonality-score | ||
| 3089 | (/ score-numerator (* len (1+ score-denominator)) 1.0) str)) | ||
| 3090 | str) | ||
| 3073 | completions)))) | 3091 | completions)))) |
| 3074 | 3092 | ||
| 3075 | (defun completion-pcm--find-all-completions (string table pred point | 3093 | (defun completion-pcm--find-all-completions (string table pred point |
| @@ -3440,8 +3458,13 @@ which is at the core of flex logic. The extra | |||
| 3440 | string table pred point | 3458 | string table pred point |
| 3441 | #'completion-flex--make-flex-pattern))) | 3459 | #'completion-flex--make-flex-pattern))) |
| 3442 | (when all | 3460 | (when all |
| 3443 | (nconc (completion-pcm--hilit-commonality pattern all) | 3461 | (let ((hilighted (completion-pcm--hilit-commonality pattern all))) |
| 3444 | (length prefix))))) | 3462 | (mapc |
| 3463 | (lambda (comp) | ||
| 3464 | (let ((score (get-text-property 0 'completion-pcm-commonality-score comp))) | ||
| 3465 | (put-text-property 0 1 'completion-style-sort-order (- score) comp))) | ||
| 3466 | hilighted) | ||
| 3467 | (nconc hilighted (length prefix)))))) | ||
| 3445 | 3468 | ||
| 3446 | ;; Initials completion | 3469 | ;; Initials completion |
| 3447 | ;; Complete /ums to /usr/monnier/src or lch to list-command-history. | 3470 | ;; Complete /ums to /usr/monnier/src or lch to list-command-history. |