mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-24 15:22:26 -07:00
Introduce a variable to control ecomplete sorting
* lisp/ecomplete.el (ecomplete-sort-predicate): New variable. (ecomplete-get-matches): Use it.
This commit is contained in:
parent
b02a06317b
commit
f121b5d7f3
3 changed files with 36 additions and 2 deletions
|
|
@ -1485,6 +1485,9 @@ choose one of these completions, use the @kbd{M-n} command to move
|
|||
down to the list. Use @kbd{M-n} and @kbd{M-p} to move down and up the
|
||||
list, and @kbd{RET} to choose a completion.
|
||||
|
||||
The @code{ecomplete-sort-predicate} variable controls how
|
||||
@code{ecomplete} matches are sorted.
|
||||
|
||||
@node Spelling
|
||||
@section Spelling
|
||||
@cindex spelling
|
||||
|
|
|
|||
4
etc/NEWS
4
etc/NEWS
|
|
@ -230,6 +230,10 @@ are implemented in C using the Jansson library.
|
|||
It's a simple convenience function for looking up MIME types based on
|
||||
file name extensions.
|
||||
|
||||
+++
|
||||
** The ecomplete sorting has changed to a decay-based algorithm. This
|
||||
can be controlled by the new `ecomplete-sort-predicate' variable.
|
||||
|
||||
|
||||
* Changes in Emacs 27.1 on Non-Free Operating Systems
|
||||
|
||||
|
|
|
|||
|
|
@ -70,6 +70,19 @@
|
|||
:type '(symbol :tag "Coding system")
|
||||
:group 'ecomplete)
|
||||
|
||||
(defcustom ecomplete-sort-predicate 'ecomplete-decay
|
||||
"Predicate to use when sorting matched.
|
||||
The predicate is called with two parameters that represent the
|
||||
completion. Each parameter is a list where the first element is
|
||||
the times the completion has been used, the second is the
|
||||
timestamp of the most recent usage, and the third item is the
|
||||
string that was matched."
|
||||
:type '(radio (function-item :tag "Sort by usage and newness" ecomplete-decay)
|
||||
(function-item :tag "Sort by times used" ecomplete-usage)
|
||||
(function-item :tag "Sort by newness" ecomplete-newness)
|
||||
(function :tag "Other"))
|
||||
:group 'ecomplete)
|
||||
|
||||
;;; Internal variables.
|
||||
|
||||
(defvar ecomplete-database nil)
|
||||
|
|
@ -122,8 +135,7 @@
|
|||
(loop for (key count time text) in elems
|
||||
when (string-match match text)
|
||||
collect (list count time text))
|
||||
(lambda (l1 l2)
|
||||
(> (car l1) (car l2))))))
|
||||
ecomplete-sort-predicate)))
|
||||
(when (> (length candidates) 10)
|
||||
(setcdr (nthcdr 10 candidates) nil))
|
||||
(unless (zerop (length candidates))
|
||||
|
|
@ -189,6 +201,21 @@ matches."
|
|||
(forward-char 1)))
|
||||
(buffer-string)))
|
||||
|
||||
(defun ecomplete-usage (l1 l2)
|
||||
(> (car l1) (car l2)))
|
||||
|
||||
(defun ecomplete-newness (l1 l2)
|
||||
(> (cadr l1) (cadr l2)))
|
||||
|
||||
(defun ecomplete-decay (l1 l2)
|
||||
(> (ecomplete-decay-1 l1) (ecomplete-decay-1 l2)))
|
||||
|
||||
(defun ecomplete-decay-1 (elem)
|
||||
;; We subtract 5% from the item for each week it hasn't been used.
|
||||
(/ (car elem)
|
||||
(expt 1.05 (/ (- (float-time) (cadr elem))
|
||||
(* 7 24 60 60)))))
|
||||
|
||||
(provide 'ecomplete)
|
||||
|
||||
;;; ecomplete.el ends here
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue