Emacs custom command line argument

Viewed 2898

From the documentation I can see I can access command line arguments (command-line-args). I'd like to add my own arguments but Emacs complains at start up that it doesn't recognize them.

E.g.

emacs -my_argument

I get:

command-line-1: Unknown option `-my_argument'

What's a proper way to define my custom arguments and provide information to my Emacs session? Is there a way to pop an argument from a command line?

3 Answers

Add something like this to your ~/.emacs, ~/.emacs.el, or ~/.emacs.d/init.el file:

(defun my-argument-fn (switch)
  (message "i was passed -my_argument"))

(add-to-list 'command-switch-alist '("-my_argument" . my-argument-fn))

Then you can execute emacs -my_argument and it should print i was passed -my_argument to the minibuffer. You can find more information in the GNU elisp reference.

For those who are interested, here is a code snip to show how to process custom arguments in Emacs lisp. In this case, I am processing an argument --suffix / -S to variable _suffix.

I pulled the idea from a BSD-Lite Script Emacs script.

  (setq _suffix nil)

  ;; Process cli args
  (while command-line-args-left 
    (setq k (car command-line-args-left))
    (setq command-line-args-left (cdr command-line-args-left))
    (setq command-line-args (delete k command-line-args))
    (cond
      (or (string-equal k "--cs-suffix")
          (string-equal k "-S"))
        (setq _suffix (intern (car command-line-args-left)))
        (setq command-line-args-left (cdr command-line-args-left))
        (setq command-line-args (delete _suffix command-line-args))
      )))

This will roll through command-line-args-left and remove them all from command-line-args which will prevent Emacs from complaining.

Related