emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/objed 18eb298 161/166: Add objed-define-local-object-ke


From: Clemens Radermacher
Subject: [elpa] externals/objed 18eb298 161/166: Add objed-define-local-object-keys*
Date: Sun, 29 Dec 2019 08:21:19 -0500 (EST)

branch: externals/objed
commit 18eb29880512edeb6c19c14ac5013154cad301af
Author: Clemens Radermacher <address@hidden>
Commit: Clemens Radermacher <address@hidden>

    Add objed-define-local-object-keys*
---
 objed-objects.el | 40 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/objed-objects.el b/objed-objects.el
index afd00de..ac05cae 100644
--- a/objed-objects.el
+++ b/objed-objects.el
@@ -460,8 +460,10 @@ KPAIRS are pairs of the key and the object name."
 (defun objed-define-local-object-keys (&rest kpairs)
   "Define object keys locally for current buffer.
 
-This function is intended to be used inside mode hooks to create
-mode specific object bindings.
+This function is intended to be used inside mode hooks to add
+mode specific object bindings to the currently existing ones. If
+you want to replace the object key bindings entirely with local
+ones see `objed-define-local-object-keys*'.
 
 KPAIRS are pairs of the key and the object name."
   (unless (local-variable-p 'objed-map)
@@ -472,7 +474,39 @@ KPAIRS are pairs of the key and the object name."
                 (make-composed-keymap nil (default-value 'objed-object-map))))
   (while kpairs
     (objed--define-kpair objed-object-map (pop kpairs) (pop kpairs)))
-  (let ((switchk (where-is-internal 'objed-object-map
+  (let ((switchk (where-is-internal (default-value 'objed-object-map)
+                                    (default-value 'objed-map) t)))
+    (define-key objed-map switchk objed-object-map)))
+
+
+(defun objed--init-local-map (lmap map)
+  "Initilize local LMAP to shadow bindings in MAP."
+  (map-keymap (lambda (ev def)
+                (if (keymapp def)
+                    (objed--init-local-map lmap def)
+                  (define-key lmap (vector ev) nil)))
+              map))
+
+(defun objed-define-local-object-keys* (&rest kpairs)
+  "Define object keys locally for current buffer.
+
+This function is intended to be used inside mode hooks and
+creates new object key bindings for the current buffer. This
+means any previous object key bindings bindings are replaced by
+the bindings defined in KPAIRS.
+
+If you only want to add or change a few mode specific bindings
+see `objed-define-local-object-keys'.
+
+KPAIRS are pairs of the key and the object name."
+  (unless (local-variable-p 'objed-map)
+    (setq-local objed-map
+                (make-composed-keymap nil (default-value 'objed-map))))
+  (setq-local objed-object-map (make-sparse-keymap))
+  (objed--init-local-map objed-object-map (default-value 'objed-map))
+  (while kpairs
+    (objed--define-kpair objed-object-map (pop kpairs) (pop kpairs)))
+  (let ((switchk (where-is-internal (default-value 'objed-object-map)
                                     (default-value 'objed-map) t)))
     (define-key objed-map switchk objed-object-map)))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]