2016-06-24 30 views
1

Ich versuche, eine Funktion zu abstrakt zu schreiben, die helm-imenu Variante zu verwenden:Wie in Emacs abstrakte Funktion ARG Pass

(defun my/helm-menu() 
    "For Org mode buffers, show Org headlines. 
For programming mode buffers, show functions, variables, etc." 
    (interactive) 
    (cond ((derived-mode-p 'org-mode) 
      (helm-org-in-buffer-headings)) 
     (t 
      (helm-semantic-or-imenu)))) 

Obwohl, wenn es in einem nicht-Org-Modus Puffer verwenden, schlägt es, es zu sagen braucht ein Argument.

In der Tat erfordert helm-semantic-or-imenuarg.

Wie soll ich das weitergeben?

Warum funktioniert das mit einem M-x helm-semantic-or-imenu: wo ist das Argument?

+0

Sie sollten versuchen, das auf http://emacs.stackexchange.com – rsenna

+0

zu fragen. Sie müssen es nicht auf emacs.stackexchange.com fragen. Sie können es hier fragen. – Drew

+0

Verwenden Sie "C-h f helm-semantic-oder-imenu", um herauszufinden, was das Argument ist. Klicken Sie auf den Link, um zur Quelldefinition zu gehen und zu sehen, was das Argument ist und wie es empfangen wird. Wenn diese Funktion ein Befehl ist, dann überprüfe die 'interactive'-Spezifikation, um zu sehen, woher das Argument kommt. Übergeben Sie dann die gleiche Art von Arg an Ihren Aufruf dieser Funktion. – Drew

Antwort

0

Nach Drews Ratschlag, das sollte es tun:

(defun my/helm-menu (arg) 
    "For Org mode buffers, show Org headlines. 
For programming mode buffers, show functions, variables, etc." 
    (interactive "P") 
    (cond ((derived-mode-p 'org-mode) 
      (helm-org-in-buffer-headings)) 
     (t 
      (helm-semantic-or-imenu arg)))) 

Zumindest funktioniert es!