branch: elpa/helm
commit 0fcca93e42feddefe7f8ebefc98ccd68677d0884
Author: Thierry Volpiatto <thie...@posteo.net>
Commit: Thierry Volpiatto <thie...@posteo.net>

    Allow new category library
    
    This is needed to differency file and library completions.
    
    Now use CATEGORY instead of FILE-COMP-P as argument for
    helm-completion--initial-filter.
---
 helm-mode.el | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/helm-mode.el b/helm-mode.el
index 55d4a0e0fc..9b30e15e46 100644
--- a/helm-mode.el
+++ b/helm-mode.el
@@ -996,7 +996,7 @@ behavior as emacs vanilla.")
     ("customize-group" . symbol-help)
     ("find-function" . symbol-help)
     ("find-variable" . symbol-help)
-    ("find-library" . file) ; FIXME needs a special category library.
+    ("find-library" . library)
     ("kill-buffer" . buffer)
     ("package-install" . package)
     ("package-vc-install" . package)
@@ -1170,7 +1170,6 @@ dynamically otherwise use 
`helm-completing-read-default-2'."
          (afix (or (plist-get completion-extra-properties :affixation-function)
                    (completion-metadata-get metadata 'affixation-function)))
          (category (completion-metadata-get metadata 'category))
-         (file-comp-p (eq category 'file))
          (sort-fn (unless (eq helm-completion-style 'helm-fuzzy)
                     (or
                      (completion-metadata-get
@@ -1181,8 +1180,7 @@ dynamically otherwise use 
`helm-completing-read-default-2'."
     (helm-aif (assoc-default name helm-completing-read-command-categories)
         (unless (completion-metadata-get metadata 'category)
           (setq metadata `(metadata (category . ,it))
-                category it
-                file-comp-p (eq category 'file))))
+                category it)))
     (helm-aif (and completions-detailed
                    (assoc-default category 
helm-completing-read-extra-metadata))
         (progn
@@ -1207,13 +1205,13 @@ dynamically otherwise use 
`helm-completing-read-default-2'."
                                      (memq require-match
                                            '(confirm 
confirm-after-completion)))
                                 1 0)
-          :fc-transformer (append (and (or afix afun file-comp-p sort-fn)
+          :fc-transformer (append (and (or afix afun (memq category '(file 
library)) sort-fn)
                                        (list (lambda (candidates _source)
                                                (helm-completion--initial-filter
                                                 (if (and sort-fn (> (length 
helm-pattern) 0))
                                                     (funcall sort-fn 
candidates)
                                                   candidates)
-                                                afun afix file-comp-p))))
+                                                afun afix category))))
                                   '(helm-cr-default-transformer))
           :quit-when-no-cand (eq require-match t)
           :nomark (null helm-comp-read-use-marked)
@@ -1256,7 +1254,7 @@ This handler uses dynamic matching which allows honouring 
`completion-styles'."
                    (completion-metadata-get metadata 'annotation-function)))
          (afix (or (plist-get completion-extra-properties :affixation-function)
                    (completion-metadata-get metadata 'affixation-function)))
-         (file-comp-p (eq (completion-metadata-get metadata 'category) 'file))
+         (category (completion-metadata-get metadata 'category))
          (compfn (lambda (str _predicate _action)
                    (let* ((completion-ignore-case (helm-set-case-fold-search))
                           (comps
@@ -1307,7 +1305,7 @@ This handler uses dynamic matching which allows honouring 
`completion-styles'."
                                                    (delete default lst))
                                       (setq default nil))
                                   lst))
-                              afun afix file-comp-p)))))
+                              afun afix category)))))
          (data (if (memq helm-completion-style '(helm helm-fuzzy))
                    (funcall compfn (or input "") nil nil)
                  compfn))
@@ -2028,13 +2026,14 @@ The `helm-find-files' history `helm-ff-history' is used 
here."
       (propertize str 'read-only t 'face 'helm-mode-prefix 'rear-nonsticky t)
     str))
 
-(defun helm-completion--initial-filter (comps afun afix file-comp-p)
-  "Compute COMPS with function AFUN or AFIX unless FILE-COMP-P non nil.
+(defun helm-completion--initial-filter (comps afun afix category)
+  "Compute COMPS with function AFIX or AFUN.
+
+When CATEGORY is file or library remove dot files from COMPS.
 
-If both AFUN and AFIX are provided only AFIX is used.
-When FILE-COMP-P is provided only filter out dot files.
+If both AFUN and AFIX are provided, AFIX takes precedence.
 
-When AFUN, AFIX and FILE-COMP-P are nil return COMPS unmodified."
+When AFUN, AFIX are nil and CATEGORY is not file return COMPS unmodified."
   ;; Normally COMPS should be a list of
   ;; string but in some cases it is given as a list of strings containing a 
list
   ;; of string e.g. ("a" "b" "c" ("d" "e" "f")) ; This happen in rgrep
@@ -2042,7 +2041,7 @@ When AFUN, AFIX and FILE-COMP-P are nil return COMPS 
unmodified."
   ;; avoid e.g. wrong-type argument: stringp '("d" "e" "f")
   ;; FIXME: If this create a new bug with completion-in-region, flatten COMPS
   ;; directly in the caller i.e. helm-completing-read-default-1.
-  (when (or afix afun file-comp-p)
+  (when (or afix afun (memq category '(file library)))
     (setq comps (helm-fast-remove-dups
                  (helm-flatten-list comps)
                  :test 'equal)))
@@ -2050,7 +2049,7 @@ When AFUN, AFIX and FILE-COMP-P are nil return COMPS 
unmodified."
   ;; We were previously exiting directly without handling afix and afun, but
   ;; maybe some file completion tables have an afix or afun in their metadata 
so
   ;; let them a chance to run these functions if some.
-  (when file-comp-p
+  (when (memq category '(file library))
     (setq comps
           (cl-loop for f in comps
                    unless (string-match "\\`\\.\\{1,2\\}/\\'" f)
@@ -2327,8 +2326,9 @@ Can be used for `completion-in-region-function' by 
advicing it with an
                                                 (string-suffix-p " " input)
                                                 (string= input ""))
                                       " "))
-                 (file-comp-p (or (eq (completion-metadata-get metadata 
'category) 'file)
-                                  (eq (plist-get completion-extra-properties 
:category) 'file)
+                 (category (or (eq (completion-metadata-get metadata 
'category) 'file)
+                               (eq (plist-get completion-extra-properties 
:category) 'file)))
+                 (file-comp-p (or (eq category 'file)
                                   (helm-guess-filename-at-point)))
                  ;; `completion-all-completions' store the base-size in the 
last `cdr',
                  ;; so data looks like this: '(a b c d . 0) and (last data) == 
(d . 0).
@@ -2383,7 +2383,7 @@ Can be used for `completion-in-region-function' by 
advicing it with an
                               (if (and sort-fn (> (length str) 0))
                                   (funcall sort-fn all)
                                 all)
-                              afun afix file-comp-p))))
+                              afun afix category))))
                  (data (if (memq helm-completion-style '(helm helm-fuzzy))
                            (funcall compfn input nil nil)
                          compfn))

Reply via email to