Skip to content

Commit

Permalink
support customizing candidate-transformer - not work now
Browse files Browse the repository at this point in the history
  • Loading branch information
zbelial committed May 21, 2023
1 parent 11867f8 commit 57aa6d9
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 51 deletions.
85 changes: 43 additions & 42 deletions helm-buffers.el
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,8 @@ The list is reordered with `helm-buffer-list-reorder-fn'."

(defun helm-buffer--details (buffer &optional details)
(require 'dired)
(let* ((mode (helm-buffer--format-mode-name buffer))
(let* ((buffer (or (car-safe buffer) buffer))
(mode (helm-buffer--format-mode-name buffer))
(buf (get-buffer buffer))
(size (propertize (helm-buffer-size buf)
'face 'helm-buffer-size))
Expand Down Expand Up @@ -488,45 +489,45 @@ The list is reordered with `helm-buffer-list-reorder-fn'."
name name-prefix file-name size mode dir
'helm-buffer-file 'helm-buffer-process nil details 'filebuf)
(cond
(;; A dired buffer.
(rassoc buf dired-buffers)
(helm-buffer--show-details
name name-prefix dir size mode dir
'helm-buffer-directory 'helm-buffer-process nil details 'dired))
;; A buffer file modified somewhere outside of emacs.=>red
((and file-name
(file-exists-p file-name)
(not (verify-visited-file-modtime buf)))
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-saved-out 'helm-buffer-process nil details 'modout))
;; A new buffer file not already saved on disk (or a deleted file) .=>indianred2
((and file-name (not (file-exists-p file-name)))
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-not-saved 'helm-buffer-process nil details 'notsaved))
;; A buffer file modified and not saved on disk.=>orange
((and file-name (buffer-modified-p buf))
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-modified 'helm-buffer-process nil details 'mod))
;; A buffer file not modified and saved on disk.=>green
(file-name
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-file 'helm-buffer-process nil details 'filebuf))
;; A non-file, modified buffer See bug#1917
((with-current-buffer name
(and helm-buffers-tick-counter
(/= helm-buffers-tick-counter (buffer-modified-tick))))
(helm-buffer--show-details
name (and proc name-prefix) dir size mode dir
'helm-no-file-buffer-modified 'helm-buffer-process proc details 'nofile-mod))
;; Any non--file buffer.=>italic
(t
(helm-buffer--show-details
name (and proc name-prefix) dir size mode dir
'helm-non-file-buffer 'helm-buffer-process proc details 'nofile)))))))
(;; A dired buffer.
(rassoc buf dired-buffers)
(helm-buffer--show-details
name name-prefix dir size mode dir
'helm-buffer-directory 'helm-buffer-process nil details 'dired))
;; A buffer file modified somewhere outside of emacs.=>red
((and file-name
(file-exists-p file-name)
(not (verify-visited-file-modtime buf)))
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-saved-out 'helm-buffer-process nil details 'modout))
;; A new buffer file not already saved on disk (or a deleted file) .=>indianred2
((and file-name (not (file-exists-p file-name)))
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-not-saved 'helm-buffer-process nil details 'notsaved))
;; A buffer file modified and not saved on disk.=>orange
((and file-name (buffer-modified-p buf))
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-modified 'helm-buffer-process nil details 'mod))
;; A buffer file not modified and saved on disk.=>green
(file-name
(helm-buffer--show-details
name name-prefix file-name size mode dir
'helm-buffer-file 'helm-buffer-process nil details 'filebuf))
;; A non-file, modified buffer See bug#1917
((with-current-buffer name
(and helm-buffers-tick-counter
(/= helm-buffers-tick-counter (buffer-modified-tick))))
(helm-buffer--show-details
name (and proc name-prefix) dir size mode dir
'helm-no-file-buffer-modified 'helm-buffer-process proc details 'nofile-mod))
;; Any non--file buffer.=>italic
(t
(helm-buffer--show-details
name (and proc name-prefix) dir size mode dir
'helm-non-file-buffer 'helm-buffer-process proc details 'nofile)))))))

(defun helm-highlight-buffers (buffers _source)
"Transformer function to highlight BUFFERS list.
Expand All @@ -535,7 +536,7 @@ buffers)."
(cl-assert helm-fuzzy-matching-highlight-fn nil "Wrong type argument functionp: nil")
(cl-loop with helm-buffers-show-icons = (and (featurep 'all-the-icons)
(default-toplevel-value
'helm-buffers-show-icons))
'helm-buffers-show-icons))
for i in buffers
for (name size mode meta) = (if helm-buffer-details-flag
(helm-buffer--details i 'details)
Expand Down Expand Up @@ -573,7 +574,7 @@ buffers)."
helm-buffers-column-separator
meta)
(funcall helm-fuzzy-matching-highlight-fn name))
(get-buffer i)))))
(get-buffer (or (car-safe i) i))))))

(defun helm-buffer--get-preselection (buffer)
(let* ((bufname (buffer-name buffer))
Expand Down
26 changes: 17 additions & 9 deletions helm-core.el
Original file line number Diff line number Diff line change
Expand Up @@ -4253,12 +4253,23 @@ Cache the candidates if there is no cached value yet."


;;; Candidate transformers
(defvar helm-candidate-transformer-alist
'()
"An alist of functions to transform candidates for each source.

Each key is the source name.

Each value is a function that should take a string and return a (DISPLAY . REAL)
cons cell.")

(defun helm-process-candidate-transformer (candidates source)
"Execute `candidate-transformer' function(s) on CANDIDATES in SOURCE."
(helm-aif (assoc-default 'candidate-transformer source)
(helm-apply-functions-from-source source it candidates)
candidates))
(let* ((name (assoc-default 'name source))
(transformer (assoc-default name helm-candidate-transformer-alist)))
(helm-aif (or transformer
(assoc-default 'candidate-transformer source))
(helm-apply-functions-from-source source it candidates)
candidates)))

(defun helm-process-filtered-candidate-transformer (candidates source)
"Execute `filtered-candidate-transformer' function(s) on CANDIDATES in SOURCE."
Expand Down Expand Up @@ -4778,12 +4789,9 @@ emacs-27 to provide such scoring in emacs<27."
for dup = (gethash c hash)
for disp = (helm-candidate-get-display c)
while (< count limit)
for target = (if (helm-get-attr 'match-on-real source)
;; Let's fails on error in
;; case next block returns nil.
(or (cdr-safe c)
(get-text-property 0 'helm-realvalue disp))
disp)
for target = (or (cdr-safe c)
(get-text-property 0 'helm-realvalue disp)
disp)
for prop-part = (get-text-property 0 'match-part target)
for part = (and match-part-fn
(or prop-part
Expand Down

0 comments on commit 57aa6d9

Please sign in to comment.