all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* How can I contextually override shift selection functions?
@ 2019-08-04 18:07 ndame
  2019-08-04 18:28 ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: ndame @ 2019-08-04 18:07 UTC (permalink / raw)
  To: help-gnu-emacs@gnu.org

Let's say I want to add an override functionality of a shift
selection function. The shift selection handling is done by
interactive ^ trickery, and it's not obvious how to preempt it.

E.g. if I want to do something in certain contexts with S-down then
I'd say:


(local-set-key (kbd "S-<down>") (lambda ()
                                  (interactive)
                                  (if (my-context)
                                      (do 'something 'else)
                                    
                                    ;; call S-down as usual
                                    (call-interactively 'next-line))))


Only the thing is call-interactively does not work here, that is
it does not extend the selection when I press S-down.

How can I invoke then the original shift selection feature from a
program if I want to invoke the default behavior?


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: How can I contextually override shift selection functions?
  2019-08-04 18:07 ndame
@ 2019-08-04 18:28 ` Eli Zaretskii
  0 siblings, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2019-08-04 18:28 UTC (permalink / raw)
  To: help-gnu-emacs

> From: ndame <emacsuser@freemail.hu>
> Date: Sun,  4 Aug 2019 20:07:20 +0200 (CEST)
> 
> (local-set-key (kbd "S-<down>") (lambda ()
>                                   (interactive)
>                                   (if (my-context)
>                                       (do 'something 'else)
>                                     
>                                     ;; call S-down as usual
>                                     (call-interactively 'next-line))))
> 
> 
> Only the thing is call-interactively does not work here, that is
> it does not extend the selection when I press S-down.
> 
> How can I invoke then the original shift selection feature from a
> program if I want to invoke the default behavior?

Did you already study the handle-shift-selection function?



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: How can I contextually override shift selection functions?
@ 2019-08-04 20:04 ndame
  0 siblings, 0 replies; 4+ messages in thread
From: ndame @ 2019-08-04 20:04 UTC (permalink / raw)
  To: help-gnu-emacs@gnu.org

(Sorry, I accidentally messed up the thread subject in the previous message.)


> Did you already study the handle-shift-selection function?

Thanks, I've taken a look and this seems to solve the issue:

   (let ((this-command-keys-shift-translated t))
     (call-interactively 'next-line)))))


though I'm wondering why simply adding the caret to the interactive spec
doesn't fix the  issue:

  (local-set-key (kbd "S-<down>") (lambda ()
                                    (interactive "^")
                                    (if (my-context)
                                        (do 'something 'else)
                                      
                                      ;; call S-down as usual
                                      (call-interactively 'next-line))))
 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: How can I contextually override shift selection functions?
@ 2019-08-05  6:19 ndame
  0 siblings, 0 replies; 4+ messages in thread
From: ndame @ 2019-08-05  6:19 UTC (permalink / raw)
  To: help-gnu-emacs@gnu.org

> though I'm wondering why simply adding the caret to the interactive spec
> doesn't fix the  issue:
> 
>   (local-set-key (kbd "S-<down>") (lambda ()
>                                     (interactive "^")
>                                     (if (my-context)
>                                         (do 'something 'else)
>                                       
>                                       ;; call S-down as usual
>                                       (call-interactively 'next-line))))
>

Ah, I took a closer look and now it's obvious I shouldn't bind Shift+...
at all and then interactive magic works:


  (local-set-key (kbd "<down>") (lambda ()
                                  (interactive "^")
                                  (if (and this-command-keys-shift-translated (my-context))
                                      (do 'something 'else)
                                      
                                    ;; call down as usual
                                    (next-line))))



 


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-08-05  6:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-04 20:04 How can I contextually override shift selection functions? ndame
  -- strict thread matches above, loose matches on Subject: below --
2019-08-05  6:19 ndame
2019-08-04 18:07 ndame
2019-08-04 18:28 ` Eli Zaretskii

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.