helm - adicionando helm-Mx às fontes de helm

7

Eu sou capaz de adicionar algumas fontes extras para o leme como este

(setq helm-mini-default-sources '(helm-source-buffers-list
                                  helm-source-recentf
                                  helm-source-dired-recent-dirs
                                  helm-chrome-source
                                  hgs/helm-c-source-stars
                                  hgs/helm-c-source-repos
                                  hgs/helm-c-source-search
                                  helm-source-buffer-not-found))

A última coisa que preciso adicionar a isso é helm-M-x. Eu só preciso adicionar todos os comandos às fontes padrão. Por isso, posso chamar uma única função e posso ir para qualquer coisa ou posso chamar qualquer comando.

Mas helm-M-xé uma função e seu código-fonte não possui fontes. Alguma ajuda sobre como conseguir isso?

ChillarAnand
fonte
Por que você deve criar a fonte de comandos do Emacs sozinho?
xuchunyang

Respostas:

4
(defvar helm-source-emacs-commands
  (helm-build-sync-source "Emacs commands"
    :candidates (lambda ()
                  (let ((cmds))
                    (mapatoms
                     (lambda (elt) (when (commandp elt) (push elt cmds))))
                    cmds))
    :coerce #'intern-soft
    :action #'command-execute)
  "A simple helm source for Emacs commands.")

;; Try it
(helm :sources helm-source-emacs-commands)
xuchunyang
fonte
Eu tentei criar outra fonte assim: gist.github.com/ChillarAnand/23119413409f00b7e995#file-helm-el mas não funcionou como esperado?
precisa saber é o seguinte
Eu tentei o seu, funciona bem, mas apenas para o histroy dos comandos do Emacs, então você helm-M-xdeve executar alguns comandos para criar esse histórico primeiro, porque o helm não salva o histórico na sessão por padrão.
xuchunyang
4

Com base na resposta de xuchunyang, pude adicionar helm-M-xfontes de leme.

(defvar helm-source-emacs-commands
  (helm-build-sync-source "Emacs commands"
    :candidates (lambda ()
                  (let ((cmds))
                    (mapatoms
                     (lambda (elt) (when (commandp elt) (push elt cmds))))
                    cmds))
    :coerce #'intern-soft
    :action #'command-execute)
  "A simple helm source for Emacs commands.")

(defvar helm-source-emacs-commands-history
  (helm-build-sync-source "Emacs commands history"
    :candidates (lambda ()
                  (let ((cmds))
                    (dolist (elem extended-command-history)
                      (push (intern elem) cmds))
                    cmds))
    :coerce #'intern-soft
    :action #'command-execute)
  "Emacs commands history")

(setq helm-mini-default-sources '(helm-source-emacs-commands-history
                                  helm-source-emacs-commands))
ChillarAnand
fonte
Ótimo, isso me ajuda muito no leme para arquivos.
ReneFroger