As I only use kill-ring-save after I used set-mark-command, I wanted to try using its binding also for another command. However I'm not able to get this to work with an additional if. I don't know how to pass the arguments to avy-goto-char-2 with the interactive stuff.

How can I determine if the mark is active, and use that information to pick a function to call?


The function region-active-p will tell you if the region is active. You can use this to determine which function to call. Both of the functions you want behave differently when called interactively vs when called as lisp functions, so you need to tell Emacs to treat them as interactive function calls with the (call-interactively ...) form. So:

(defun my-double ()
  (if (region-active-p)
      (call-interactively 'kill-ring-save)
    (call-interactively 'avy-goto-char-2)))
  • 1
    (defun my-double (beg end) (interactive "r") (if (use-region-p) (kill-ring-save beg end 'REGION) (call-interactively #'avy-goto-char-2)))
    – Drew
    Jul 4 '16 at 22:37
  • @Drew that looks better. Any benefit, beyond style, to not using call-interactively?
    – Tyler
    Jul 4 '16 at 23:11
  • Not really. I just thought I'd mention it as an alternative.
    – Drew
    Jul 5 '16 at 0:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.