branch: externals/vertico
commit d16007b7f71962ef42be448eb9d54c2d4dfd19b4
Author: Daniel Mendler <m...@daniel-mendler.de>
Commit: Daniel Mendler <m...@daniel-mendler.de>

    Express decay in history shifts
---
 extensions/vertico-sort.el | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/extensions/vertico-sort.el b/extensions/vertico-sort.el
index 2fd32ffd9e..c2cb0b5113 100644
--- a/extensions/vertico-sort.el
+++ b/extensions/vertico-sort.el
@@ -42,18 +42,19 @@
   "History hash table and corresponding base string.")
 
 (defcustom vertico-sort-history-duplicate 10
-  "Maximal number of history positions gained by duplicate history elements.
+  "History position shift for duplicate history elements.
 The more often a duplicate element occurs in the history, the earlier it
-appears in the completion list.  The position gain decays exponentially
-with `vertico-sort-history-decay'.  Note that duplicates occur only if
+appears in the completion list.  The shift decays exponentially with
+`vertico-sort-history-decay'.  Note that duplicates occur only if
 `history-delete-duplicates' is disabled."
   :type 'number
   :group 'vertico)
 
-(defcustom vertico-sort-history-decay 0.005
-  "Exponential decay for the position gain of duplicate elements.
-See also `vertico-sort-history-duplicate'."
-  :type 'float
+(defcustom vertico-sort-history-decay 20
+  "Exponential decay for the position shift of duplicate elements.
+The shift will decay away after `vertico-sort-history-duplicate' times
+`vertico-sort-history-decay' history elements."
+  :type 'number
   :group 'vertico)
 
 (defun vertico-sort--history ()
@@ -68,7 +69,8 @@ See also `vertico-sort-history-duplicate'."
                           (eq minibuffer-history-variable 'file-name-history)))
              (curr-file (when-let ((win (and file-p 
(minibuffer-selected-window)))
                                    (file (buffer-file-name (window-buffer 
win))))
-                          (abbreviate-file-name file))))
+                          (abbreviate-file-name file)))
+             (decay (/ -1.0 (* vertico-sort-history-duplicate 
vertico-sort-history-decay))))
         (cl-loop for elem in hist for idx from 0 do
                  (when (and (not (equal curr-file elem)) ;; Deprioritize 
current file
                             (or (= base-len 0)
@@ -81,7 +83,7 @@ See also `vertico-sort-history-duplicate'."
                      (let ((r (if-let ((r (gethash elem ht)))
                                   ;; Reduce duplicate rank with exponential 
decay.
                                   (- r (round (* vertico-sort-history-duplicate
-                                                 (exp (* -1.0 
vertico-sort-history-decay idx)))))
+                                                 (exp (* decay idx)))))
                                 ;; Never outrank the most recent element.
                                 (if (= idx 0) (/ most-negative-fixnum 2) 
idx))))
                        (puthash elem r ht)))))

Reply via email to