diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ecomplete.el | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/lisp/ecomplete.el b/lisp/ecomplete.el index 43ab8e691e6..2197d9512de 100644 --- a/lisp/ecomplete.el +++ b/lisp/ecomplete.el | |||
| @@ -70,6 +70,19 @@ | |||
| 70 | :type '(symbol :tag "Coding system") | 70 | :type '(symbol :tag "Coding system") |
| 71 | :group 'ecomplete) | 71 | :group 'ecomplete) |
| 72 | 72 | ||
| 73 | (defcustom ecomplete-sort-predicate 'ecomplete-decay | ||
| 74 | "Predicate to use when sorting matched. | ||
| 75 | The predicate is called with two parameters that represent the | ||
| 76 | completion. Each parameter is a list where the first element is | ||
| 77 | the times the completion has been used, the second is the | ||
| 78 | timestamp of the most recent usage, and the third item is the | ||
| 79 | string that was matched." | ||
| 80 | :type '(radio (function-item :tag "Sort by usage and newness" ecomplete-decay) | ||
| 81 | (function-item :tag "Sort by times used" ecomplete-usage) | ||
| 82 | (function-item :tag "Sort by newness" ecomplete-newness) | ||
| 83 | (function :tag "Other")) | ||
| 84 | :group 'ecomplete) | ||
| 85 | |||
| 73 | ;;; Internal variables. | 86 | ;;; Internal variables. |
| 74 | 87 | ||
| 75 | (defvar ecomplete-database nil) | 88 | (defvar ecomplete-database nil) |
| @@ -122,8 +135,7 @@ | |||
| 122 | (loop for (key count time text) in elems | 135 | (loop for (key count time text) in elems |
| 123 | when (string-match match text) | 136 | when (string-match match text) |
| 124 | collect (list count time text)) | 137 | collect (list count time text)) |
| 125 | (lambda (l1 l2) | 138 | ecomplete-sort-predicate))) |
| 126 | (> (car l1) (car l2)))))) | ||
| 127 | (when (> (length candidates) 10) | 139 | (when (> (length candidates) 10) |
| 128 | (setcdr (nthcdr 10 candidates) nil)) | 140 | (setcdr (nthcdr 10 candidates) nil)) |
| 129 | (unless (zerop (length candidates)) | 141 | (unless (zerop (length candidates)) |
| @@ -189,6 +201,21 @@ matches." | |||
| 189 | (forward-char 1))) | 201 | (forward-char 1))) |
| 190 | (buffer-string))) | 202 | (buffer-string))) |
| 191 | 203 | ||
| 204 | (defun ecomplete-usage (l1 l2) | ||
| 205 | (> (car l1) (car l2))) | ||
| 206 | |||
| 207 | (defun ecomplete-newness (l1 l2) | ||
| 208 | (> (cadr l1) (cadr l2))) | ||
| 209 | |||
| 210 | (defun ecomplete-decay (l1 l2) | ||
| 211 | (> (ecomplete-decay-1 l1) (ecomplete-decay-1 l2))) | ||
| 212 | |||
| 213 | (defun ecomplete-decay-1 (elem) | ||
| 214 | ;; We subtract 5% from the item for each week it hasn't been used. | ||
| 215 | (/ (car elem) | ||
| 216 | (expt 1.05 (/ (- (float-time) (cadr elem)) | ||
| 217 | (* 7 24 60 60))))) | ||
| 218 | |||
| 192 | (provide 'ecomplete) | 219 | (provide 'ecomplete) |
| 193 | 220 | ||
| 194 | ;;; ecomplete.el ends here | 221 | ;;; ecomplete.el ends here |