emacs-diffs
[Top][All Lists]
Advanced

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

scratch/se-matrix 7c10518d169: Merge branch 'master' into scratch/se-mat


From: Gerd Moellmann
Subject: scratch/se-matrix 7c10518d169: Merge branch 'master' into scratch/se-matrix
Date: Thu, 23 Jan 2025 09:38:43 -0500 (EST)

branch: scratch/se-matrix
commit 7c10518d169210b0aaf53035dff44923d7ee663c
Merge: 24ee7217957 d83d090de11
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>

    Merge branch 'master' into scratch/se-matrix
---
 lisp/emacs-lisp/shortdoc.el | 131 ++++++++++++++++++++++++++++++++++++++++++++
 src/dispextern.h            |   2 +
 src/dispnew.c               |   4 +-
 src/term.c                  |  17 +++---
 4 files changed, 142 insertions(+), 12 deletions(-)

diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el
index 230df47821c..cc9971b232f 100644
--- a/lisp/emacs-lisp/shortdoc.el
+++ b/lisp/emacs-lisp/shortdoc.el
@@ -174,6 +174,137 @@ A FUNC form can have any number of `:no-eval' (or 
`:no-value'),
                 (if (eq .rose 'red)
                     .lily)))))
 
+(define-short-documentation-group map
+  "Map Basics"
+  (mapp
+   :eval (mapp (list 'bar 1 'foo 2 'baz 3))
+   :eval (mapp (list '(bar . 1) '(foo . 2) '(baz . 3)))
+   :eval (mapp [bar foo baz])
+   :eval (mapp "this is a string")
+   :eval (mapp #s(hash-table data (bar 1 foo 2 baz 3)))
+   :eval (mapp '())
+   :eval (mapp nil)
+   :eval (mapp (make-char-table 'shortdoc-test)))
+  (map-empty-p
+   :args (map)
+   :eval (map-empty-p nil)
+   :eval (map-empty-p [])
+   :eval (map-empty-p '()))
+  (map-elt
+   :args (map key)
+   :eval (map-elt (list 'bar 1 'foo 2 'baz 3) 'foo)
+   :eval (map-elt (list '(bar . 1) '(foo . 2) '(baz . 3)) 'foo)
+   :eval (map-elt [bar foo baz] 1)
+   :eval (map-elt #s(hash-table data (bar 1 foo 2 baz 3)) 'foo))
+  (map-contains-key
+   :args (map key)
+   :eval (map-contains-key (list 'bar 1 'foo 2 'baz 3) 'foo)
+   :eval (map-contains-key (list '(bar . 1) '(foo . 2) '(baz . 3)) 'foo)
+   :eval (map-contains-key [bar foo baz] 1)
+   :eval (map-contains-key #s(hash-table data (bar 1 foo 2 baz 3)) 'foo))
+  (map-put!
+   (map key value)
+   :eval
+"(let ((map (list 'bar 1 'baz 3)))
+    (map-put! map 'foo 2)
+    map)"
+;; This signals map-not-inplace when used in shortdoc.el :-(
+;;    :eval
+;; "(let ((map (list '(bar . 1) '(baz . 3))))
+;;     (map-put! map 'foo 2)
+;;     map)"
+    :eval
+"(let ((map [bar bot baz]))
+    (map-put! map 1 'foo)
+    map)"
+   :eval
+"(let ((map #s(hash-table data (bar 1 baz 3))))
+    (map-put! map 'foo 2)
+    map)")
+  (map-insert
+   :args (map key value)
+   :eval (map-insert (list 'bar 1 'baz 3 'foo 7) 'foo 2)
+   :eval (map-insert (list '(bar . 1) '(baz . 3) '(foo . 7)) 'foo 2)
+   :eval (map-insert [bar bot baz] 1 'foo)
+   :eval (map-insert #s(hash-table data (bar 1 baz 3 foo 7)) 'foo 2))
+  (map-delete
+   :args (map key)
+   :eval (map-delete (list 'bar 1 'foo 2 'baz 3) 'foo)
+   :eval (map-delete (list '(bar . 1) '(foo . 2) '(baz . 3)) 'foo)
+   :eval (map-delete [bar foo baz] 1)
+   :eval (map-delete #s(hash-table data (bar 1 foo 2 baz 3)) 'foo))
+  (map-keys
+   :eval (map-keys (list 'bar 1 'foo 2 'baz 3))
+   :eval (map-keys (list '(bar . 1) '(foo . 2) '(baz . 3)))
+   :eval (map-keys [bar foo baz])
+   :eval (map-keys #s(hash-table data (bar 1 foo 2 baz 3))))
+  (map-values
+   :args (map)
+   :eval (map-values (list 'bar 1 'foo 2 'baz 3))
+   :eval (map-values (list '(bar . 1) '(foo . 2) '(baz . 3)))
+   :eval (map-values [bar foo baz])
+   :eval (map-values #s(hash-table data (bar 1 foo 2 baz 3))))
+  (map-pairs
+   :eval (map-pairs (list 'bar 1 'foo 2 'baz 3))
+   :eval (map-pairs (list '(bar . 1) '(foo . 2) '(baz . 3)))
+   :eval (map-pairs [bar foo baz])
+   :eval (map-pairs #s(hash-table data (bar 1 foo 2 baz 3))))
+  (map-length
+   :args (map)
+   :eval (map-length (list 'bar 1 'foo 2 'baz 3))
+   :eval (map-length (list '(bar . 1) '(foo . 2) '(baz . 3)))
+   :eval (map-length [bar foo baz])
+   :eval (map-length #s(hash-table data (bar 1 foo 2 baz 3))))
+  (map-copy
+   :args (map)
+   :eval (map-copy (list 'bar 1 'foo 2 'baz 3))
+   :eval (map-copy (list '(bar . 1) '(foo . 2) '(baz . 3)))
+   :eval (map-copy [bar foo baz])
+   :eval (map-copy #s(hash-table data (bar 1 foo 2 baz 3))))
+  "Doing things to maps and their contents"
+  (map-apply
+   :args (function map)
+   :eval (map-apply #'+ (list '(1 . 2)  '(3 . 4))))
+  (map-do
+   :args (function map)
+   :eval
+"(let ((map (list '(1 . 1) '(2 . 3)))
+      acc)
+  (map-do (lambda (k v) (push (+ k v) acc)) map)
+  (nreverse acc))")
+  (map-keys-apply
+   :eval (map-keys-apply #'1+ (list '(1 . 2)  '(3 . 4))))
+  (map-values-apply
+   :args (function map)
+   :eval (map-values-apply #'1+ (list '(1 . 2)  '(3 . 4))))
+  (map-filter
+   :eval (map-filter (lambda (k _) (cl-oddp k)) (list '(1 . 2) '(4 . 6)))
+   :eval (map-filter (lambda (k v) (cl-evenp (+ k v))) (list '(1 . 2) '(4 . 
6))))
+  (map-remove
+   :eval (map-remove (lambda (k _) (cl-oddp k)) (list '(1 . 2) '(4 . 6)))
+   :eval (map-remove (lambda (k v) (cl-evenp (+ k v))) (list '(1 . 2) '(4 . 
6))))
+  (map-some
+   :eval (map-some (lambda (k _) (cl-oddp k)) (list '(1 . 2) '(4 . 6)))
+   :eval (map-some (lambda (k v) (cl-evenp (+ k v))) (list '(1 . 2) '(4 . 6))))
+  (map-every-p
+   :eval (map-every-p (lambda (k _) (cl-oddp k)) (list '(1 . 2) '(4 . 6)))
+   :eval (map-every-p (lambda (k v) (cl-evenp (+ k v))) (list '(1 . 3) '(4 . 
6))))
+  "Combining and changing maps"
+  (map-merge
+   :eval (map-merge 'alist '(1 2 3 4) #s(hash-table data (5 6 7 8)))
+   :eval (map-merge 'list '(1 2 3 4) #s(hash-table data (5 6 7 8)))
+   :eval (map-merge 'plist '(1 2 3 4) #s(hash-table data (5 6 7 8)))
+   :eval (map-merge 'hash-table '(1 2 3 4) #s(hash-table data (5 6 7 8))))
+  (map-merge-with
+   :eval (map-merge-with 'alist #'max '(1 2 3 4) #s(hash-table data (1 1 3 5)))
+   :eval (map-merge-with 'alist #'min '(1 2 3 4) #s(hash-table data (1 1 3 5)))
+   :eval (map-merge-with 'hash-table #'min '(1 2 3 4) #s(hash-table data (1 1 
3 5))))
+  (map-into
+   :args (map type)
+   :eval (map-into #s(hash-table data '(5 6 7 8)) 'list)
+   :eval (map-into '((5 . 6) (7 . 8)) 'plist)
+   :eval (map-into '((5 . 6) (7 . 8)) 'hash-table)))
+
 (define-short-documentation-group string
   "Making Strings"
   (make-string
diff --git a/src/dispextern.h b/src/dispextern.h
index af4e0547af4..3582b9d567d 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3967,6 +3967,8 @@ void check_window_matrix_pointers_for_frame (struct frame 
*f);
 # else
 INLINE void check_window_matrix_pointers_for_frame (struct frame *f) {}
 # endif
+void frame_pos_abs (struct frame *f, int *x, int *y);
+bool is_frame_ancestor (struct frame *f1, struct frame *f2);
 
 INLINE_HEADER_END
 
diff --git a/src/dispnew.c b/src/dispnew.c
index a35ded7e567..93cf40b0203 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -3383,7 +3383,7 @@ rect_intersect (struct rect *r, struct rect r1, struct 
rect r2)
 
 /* Return the absolute position of frame F in *X and *Y.  */
 
-static void
+void
 frame_pos_abs (struct frame *f, int *x, int *y)
 {
   *x = *y = 0;
@@ -3423,7 +3423,7 @@ max_child_z_order (struct frame *parent)
 
 /* Return true if F1 is an ancestor of F2.  */
 
-static bool
+bool
 is_frame_ancestor (struct frame *f1, struct frame *f2)
 {
   for (struct frame *f = FRAME_PARENT_FRAME (f2); f; f = FRAME_PARENT_FRAME 
(f))
diff --git a/src/term.c b/src/term.c
index 47fd9297ab5..4774b7a32d0 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2990,19 +2990,16 @@ tty_menu_calc_size (tty_menu *menu, int *width, int 
*height)
 static void
 mouse_get_xy (int *x, int *y)
 {
-  Lisp_Object lmx = Qnil, lmy = Qnil;
   Lisp_Object mouse = mouse_position (tty_menu_calls_mouse_position_function);
 
-  if (EQ (selected_frame, XCAR (mouse)))
-    {
-      lmx = XCAR (XCDR (mouse));
-      lmy = XCDR (XCDR (mouse));
-    }
-
-  if (!NILP (lmx))
+  struct frame *f = XFRAME (XCAR (mouse));
+  struct frame *sf = SELECTED_FRAME ();
+  if (f == sf || is_frame_ancestor (sf, f))
     {
-      *x = XFIXNUM (lmx);
-      *y = XFIXNUM (lmy);
+      int fx, fy;
+      frame_pos_abs (f, &fx, &fy);
+      *x = fx + XFIXNUM (XCAR (XCDR (mouse)));
+      *y = fy + XFIXNUM (XCDR (XCDR (mouse)));
     }
 }
 



reply via email to

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