## helm and prefix functions

| categories: | tags: | View Comments

Helm modifies how you use prefix arguments in Emacs. A prefix argument is when you type C-u before a command to modify its behavior. There are a few variations of prefix arguments. Basically, pressing C-u once sets a prefix variable to '(4), pressing twice sets it to '(16). Alternatively, C-u 7 sets the prefix to 7. In regular emacs commands, you type the prefix keys before the command. In helm, you type the after you enter the helm selection buffer, and before you press enter or select your action. In helm, you access the prefix arg in the variable helm-current-prefix-arg. Let us look at how you might use it.

We make an action function that does something conditionally depending on the prefix arg. Yes, you could write several functions to accomplish that too, but maybe there is just a little difference that you can use the prefix arg to handle. What you cannot remember 4 prefix options? You do write good doc strings on your functions right ;) If not, you probably ought to write four functions with meaningful names, and meaningful helm descriptions!

(defun action (candidate)
"Our action function.
with no prefix message no prefix arg
with one prefix arg message C-u
with two prefix args message C-u C-u
with a numeric prefix arg, message the number."
(interactive "p")
(cond
((eq nil helm-current-prefix-arg)
(message-box "no prefix arg"))
((equal helm-current-prefix-arg '(4))
(message-box "C-u"))
((equal helm-current-prefix-arg '(16))
(message-box "C-u C-u"))
(t
(message-box (format "C-u %s" helm-current-prefix-arg)))))

(setq some-helm-source
'((name . "HELM at the Emacs")
(candidates . (1 2 3 4))
(action . action)))

(helm :sources '(some-helm-source))

C-u (64)