[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Delegating user-reserved key binding space definition to users
From: |
Ihor Radchenko |
Subject: |
Re: Delegating user-reserved key binding space definition to users |
Date: |
Sat, 26 Nov 2022 06:44:09 +0000 |
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> The problem I'm working to reach is allowing packages to correctly shadow
>> the user's bindings (and not incorrectly shadow) instead of ad-hoc
>> imitation of the global map defaults. Ad-hoc imitation makes it very
>> tedious to, for instance, change the key sequence for expressing "next"
>> without losing coherence among all packages with a corresponding "next"
>> concept.
>
> I don't think anyone doubts that it's desirable.
> The question is how to get that.
I suggest introducing a notion of "generalized" commands. Such commands
will represent common actions executed by users (like move to
next/previous element). Major and minor modes can then define specific
implementation of the actions.
In terms of OOP, I am talking about virtual methods and major/minor modes
providing the implementations. The implementations will be chosen
according to the current major mode or maybe some other condition.
Default implementation (like `next-line') can also be provided.
The generalized commands can then be freely re-bound by users with
immediate effect on all the major modes.
An example (not very clean) implementation of this concept is available
at
https://github.com/yantar92/meta-functions/blob/master/meta-functions.el:
; Quick implementation of meta-functions, which allows running multiple
;; functions, which do similar logical operations by one single "meta"
;; function in different major modes. For example, one may want to define
;; meta-next-line to call `next-line' normally, but
;; `org-agenda-next-line' in org-agenda mode. Both can be bound to, say
;; "M-j", without a need to change the key-bindings on both fundamental
;; and org-agenda modes.
;; Example usage:
;; (use-package meta-functions
;; :config
;; (meta-defun meta-next-element ()
;; "Go to next element."
;; :mode org-agenda-mode (org-agenda-next-item 1) ; call org-agenda-next-item
in org-agenda
;; :cond (lambda () (and (eq major-mode 'org-mode) (org-at-heading-p)))
(org-next-visible-heading 1) ; call org-next-visible-headting when at heading
in org-mode
;; (next-line)) ; call-next line in any other case
;; )
;; or the same can be written as
;; (meta-defun meta-next-element "Go to next element." next-line)
;; (meta-defun meta-next-element :mode org-agenda-mode (org-agenda-next-item 1))
;; (meta-defun meta-next-element :mode org-mode :cond org-at-heading-p
(org-next-visible-heading 1))
;;
;; Similar packages:
;; https://gitlab.com/jjzmajic/handle implements similar functionality to unify
functions across major modes
;; However, handle is very major-mode centric. meta-functions is more
function-centric
;; Also, meta-functions is not only limited to current major mode defining
which function to call.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
- Delegating user-reserved key binding space definition to users, Psionic K, 2022/11/21
- Re: Delegating user-reserved key binding space definition to users, Stefan Monnier, 2022/11/21
- Re: Delegating user-reserved key binding space definition to users, Phil Sainty, 2022/11/21
- Re: Delegating user-reserved key binding space definition to users, Stefan Monnier, 2022/11/25
- Re: Delegating user-reserved key binding space definition to users,
Ihor Radchenko <=
- Re: Delegating user-reserved key binding space definition to users, Stefan Monnier, 2022/11/26
- Re: Delegating user-reserved key binding space definition to users, Ihor Radchenko, 2022/11/27
- Re: Delegating user-reserved key binding space definition to users, Psionic K, 2022/11/27
- Re: Delegating user-reserved key binding space definition to users, Psionic K, 2022/11/27
- Re: Delegating user-reserved key binding space definition to users, Stefan Monnier, 2022/11/28
- Re: Delegating user-reserved key binding space definition to users, Eli Zaretskii, 2022/11/28
- Re: Delegating user-reserved key binding space definition to users, Psionic K, 2022/11/28
- Re: Delegating user-reserved key binding space definition to users, Stefan Monnier, 2022/11/28
- Re: Delegating user-reserved key binding space definition to users, Psionic K, 2022/11/29
- Re: Delegating user-reserved key binding space definition to users, Eli Zaretskii, 2022/11/29