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 @@ - (void)unmarkText 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 @@ - (NSRect)firstRectForCharacterRange: (NSRange)theRange 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 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with 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);