1

Suppose I want to code something like this

case mode in
   lisp-mode)
       do-something
       ;;
   shell-mode)
       do-other
       ;;
   latex-mode)
       do-different
       ;;
esac

What would be the best way to do this in lisp? Especially, how to find out, which mode is in use?

Jan
  • 373
  • 2
  • 12

1 Answers1

9

See major-mode variable to find out major mode:

Symbol for current buffer’s major mode.

See cond function to do something depending on mode:

Try each clause until one succeeds.

Each clause looks like (CONDITION BODY...). CONDITION is evaluated and, if the value is non-nil, this clause succeeds: then the expressions in BODY are evaluated and the last one’s value is the value of the cond-form. If a clause has one element, as in (CONDITION), then the cond-form returns CONDITION’s value, if that is non-nil. If no clause succeeds, cond returns nil.

E.g.

(cond
 ((eq major-mode 'lisp-interaction-mode) (message "lisp interaction mode"))
 ((eq major-mode 'text-mode) (message "text mode")))

Also see derived-mode-p function:

(derived-mode-p &rest MODES)

Non-nil if the current major mode is derived from one of MODES.

muffinmad
  • 2,250
  • 7
  • 11
  • 2
    This could also use `pcase` to remove the repeated `eq major-mode`; e.g., `(pcase major-mode ('lisp-interaction-mode (message...` – zck Dec 27 '19 at 16:30