diff options
author | Po Lu <luangruo@yahoo.com> | 2022-11-13 09:03:51 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-11-13 09:04:25 +0800 |
commit | 47b377f64bef8c3da519b3aa9c5c90b7199ba524 (patch) | |
tree | c37db270f66eccf7d708fa0f384646b266d1cabe /src/nsterm.m | |
parent | 9d334f558a1151ff12b7022a88c75ceb4f1fbdf4 (diff) | |
download | emacs-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.m | 33 |
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); |