I find how to add number for helm-buffers-list,just redefine this function with two points (in codes with comments) for adding line numbers.
(defun helm-highlight-buffers (buffers _source)
"Transformer function to highlight BUFFERS list.
Should be called after others transformers i.e (boring buffers)."
(cl-loop for i in buffers
;;; **1. create number***************************************
for number from 1 to (length buffers)
for (name size mode meta) = (if helm-buffer-details-flag
(helm-buffer--details i 'details)
(helm-buffer--details i))
for truncbuf = (if (> (string-width name) helm-buffer-max-length)
(helm-substring-by-width
name helm-buffer-max-length
helm-buffers-end-truncated-string)
(concat name
(make-string
(- (+ helm-buffer-max-length
(length helm-buffers-end-truncated-string))
(string-width name)) ? )))
for len = (length mode)
when (> len helm-buffer-max-len-mode)
do (setq helm-buffer-max-len-mode len)
for fmode = (concat (make-string
(- (max helm-buffer-max-len-mode len) len) ? )
mode)
for formatted-size = (and size (format "%7s" size))
collect (cons (if helm-buffer-details-flag
;;; **** 2. concat number at first ****************************
(concat (int-to-string number) " " truncbuf "\t" formatted-size
" " fmode " " meta)
name)
(get-buffer i))))
To select buffer like recentf-open-files, I define some keys for helm-map for selecting by alt+number.
;;; add alt+number to select nth line
(require 'cl)
(cl-loop for n from 1 to 9
for key = (format "M-%d" n)
for fn = `(lambda ()
(interactive)
(helm-next-line ,(- n 1))
(helm-maybe-exit-minibuffer)
)
do (progn
(define-key helm-map (kbd key) fn)))