summaryrefslogtreecommitdiff
path: root/src/nsterm.m
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-11-13 09:03:51 +0800
committerPo Lu <luangruo@yahoo.com>2022-11-13 09:04:25 +0800
commit47b377f64bef8c3da519b3aa9c5c90b7199ba524 (patch)
treec37db270f66eccf7d708fa0f384646b266d1cabe /src/nsterm.m
parent9d334f558a1151ff12b7022a88c75ceb4f1fbdf4 (diff)
downloademacs-47b377f64bef8c3da519b3aa9c5c90b7199ba524.tar.gz
Prevent non-local exits from ns-in-echo-area
* src/nsterm.m (ns_in_echo_area_1): (ns_in_echo_area_2): (ns_in_echo_area): New functions. ([EmacsView firstRectForCharacterRange:]): Call them instead. (syms_of_nsterm): New defsym.
Diffstat (limited to 'src/nsterm.m')
-rw-r--r--src/nsterm.m33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/nsterm.m b/src/nsterm.m
index 17f40dc7e37..507f2a9e7da 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -7056,6 +7056,36 @@ ns_create_font_panel_buttons (id target, SEL select, SEL cancel_action)
processingCompose = NO;
}
+static Lisp_Object
+ns_in_echo_area_1 (void *ptr)
+{
+ Lisp_Object in_echo_area;
+ specpdl_ref count;
+
+ count = SPECPDL_INDEX ();
+ specbind (Qinhibit_quit, Qt);
+ in_echo_area = safe_call (1, Qns_in_echo_area);
+
+ return unbind_to (count, in_echo_area);
+}
+
+static Lisp_Object
+ns_in_echo_area_2 (enum nonlocal_exit exit, Lisp_Object error)
+{
+ return Qnil;
+}
+
+static bool
+ns_in_echo_area (void)
+{
+ Lisp_Object in_echo_area;
+
+ in_echo_area
+ = internal_catch_all (ns_in_echo_area_1, NULL,
+ ns_in_echo_area_2);
+
+ return !NILP (in_echo_area);
+}
/* Used to position char selection windows, etc. */
- (NSRect)firstRectForCharacterRange: (NSRange)theRange
@@ -7069,7 +7099,7 @@ ns_create_font_panel_buttons (id target, SEL select, SEL cancel_action)
if (NS_KEYLOG)
NSLog (@"firstRectForCharRange request");
- if (WINDOWP (echo_area_window) && ! NILP (call0 (intern ("ns-in-echo-area"))))
+ if (WINDOWP (echo_area_window) && ns_in_echo_area ())
win = XWINDOW (echo_area_window);
else
win = XWINDOW (FRAME_SELECTED_WINDOW (emacsframe));
@@ -11012,6 +11042,7 @@ respectively. */);
DEFSYM (Qcondensed, "condensed");
DEFSYM (Qreverse_italic, "reverse-italic");
DEFSYM (Qexpanded, "expanded");
+ DEFSYM (Qns_in_echo_area, "ns-in-echo-area");
#ifdef NS_IMPL_COCOA
Fprovide (Qcocoa, Qnil);