From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Ken Raeburn Newsgroups: gmane.emacs.bugs Subject: bug#21473: 24.5; very slow tooltip display to sort-of-slow remote display Date: Thu, 01 Oct 2015 06:01:35 -0400 Message-ID: <6ebnci3o1s.fsf@just-testing.permabit.com> References: <9F31D581-6B5A-42B7-8031-6920089AFFF4@permabit.com> <83pp15hdbg.fsf@gnu.org> <59C0A752-87BB-4467-9A3F-DC1E5A278842@permabit.com> <83612wf8pr.fsf@gnu.org> <83si5wbcap.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1443710748 26658 80.91.229.3 (1 Oct 2015 14:45:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 1 Oct 2015 14:45:48 +0000 (UTC) Cc: 21473@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Oct 01 16:45:36 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Zhf71-0002gF-Oc for geb-bug-gnu-emacs@m.gmane.org; Thu, 01 Oct 2015 16:45:36 +0200 Original-Received: from localhost ([::1]:51172 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zhf70-0007y0-TS for geb-bug-gnu-emacs@m.gmane.org; Thu, 01 Oct 2015 10:45:34 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46332) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zhagg-0005nX-G4 for bug-gnu-emacs@gnu.org; Thu, 01 Oct 2015 06:02:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zhagc-0001t6-Sa for bug-gnu-emacs@gnu.org; Thu, 01 Oct 2015 06:02:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:60944) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zhagc-0001sy-Pq for bug-gnu-emacs@gnu.org; Thu, 01 Oct 2015 06:02:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Zhagc-0008M5-G5 for bug-gnu-emacs@gnu.org; Thu, 01 Oct 2015 06:02:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ken Raeburn Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 01 Oct 2015 10:02:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21473 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 21473-submit@debbugs.gnu.org id=B21473.144369370332092 (code B ref 21473); Thu, 01 Oct 2015 10:02:02 +0000 Original-Received: (at 21473) by debbugs.gnu.org; 1 Oct 2015 10:01:43 +0000 Original-Received: from localhost ([127.0.0.1]:49915 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZhagI-0008LW-3b for submit@debbugs.gnu.org; Thu, 01 Oct 2015 06:01:43 -0400 Original-Received: from mail-qk0-f171.google.com ([209.85.220.171]:35993) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZhagF-0008LO-Bh for 21473@debbugs.gnu.org; Thu, 01 Oct 2015 06:01:41 -0400 Original-Received: by qkcf65 with SMTP id f65so29619770qkc.3 for <21473@debbugs.gnu.org>; Thu, 01 Oct 2015 03:01:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=permabit.com; s=google; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type:content-transfer-encoding; bh=YffT2y2P+8D07ZsT3rxqiwd0mHKr57JvCZpKdySOHk4=; b=Ygz4BmPAOkHyiPfs09qjmjKR/6k1ysLc/xMQ/3c5vCowUhUZlBNFM30reMQXywxgpV EG1r8tdgE1P386ab+6xN1QXs0F70yU4R0HiZVDzHXLNaok6er4LWsEk4bVSE5lC7oj+a R1zSiCCm7L35rYh5cuW0A4VMj8+9oVJFBW3sw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-type :content-transfer-encoding; bh=YffT2y2P+8D07ZsT3rxqiwd0mHKr57JvCZpKdySOHk4=; b=aJTnL820EUdsm+yAo6E+6HZchmTcg3SfMWSI5lh4XY99xsnknKyBTZQfTIe7cwsP43 wG8FXDMHfgBwLdW8veBFE3CPrH353iqwnIv2RNWbkkuNXEtw6XCzCLJC37kvoFxHgd/6 lQfeQvKWCq5SJdCNBrkssToG8hNr2Up/9drLlFcTpq1qVKfzjaSoHzdQXWbnq/B9zKPm 156aX6x8T4xiAaLDxgjXCMPcvkKs7sO1VThI5xzD6RWgmQDA4hMltasHEC2tp0c8Ir6I jxlK4/gNRXiWLvI5y5nCVxoV5QZgpjhqlqfV7nbXUujiHbxf/XWhDRMasXxXMOB9zn67 dF2w== X-Gm-Message-State: ALoCoQkv98KGLTnS3G4ig4tFQxqMnG/iXSp1WqkdMjnjcIbY5M9sMDy618RvvRE+tnQ/8NZ2OExf X-Received: by 10.55.198.77 with SMTP id b74mr10793440qkj.8.1443693698439; Thu, 01 Oct 2015 03:01:38 -0700 (PDT) Original-Received: from just-testing.permabit.com (vpn.permabit.com. [66.202.84.2]) by smtp.gmail.com with ESMTPSA id 4sm2069427qhr.33.2015.10.01.03.01.36 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 01 Oct 2015 03:01:36 -0700 (PDT) In-Reply-To: <83si5wbcap.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 30 Sep 2015 10:23:42 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:107139 Archived-At: Eli Zaretskii writes: > Let me be sure I understand: these XSync calls in the case of popping > up a tooltip, are mostly due to color allocation? Or is there other > unnecessary face-related traffic that needs to be addressed? No, the color allocations and XSync calls are two separate causes of delay, each contributing round trips to the server. The XSync calls are mostly due to error-trapping code (not in color lookup or allocation). To pick one example, x_set_mouse_color does a sequence like this: x_catch_errors Calls XSync to make sure we've processed errors from previously sent requests, then pushes an x_error_message_stack structure onto a stack. XCreateFontCursor(x-pointer-shape or XC_xterm) Returns a value but this is a locally-assigned number, not an indication of success. x_check_errors("bad text pointer cursor") Calls XSync to make sure any error from XCreateFontCursor is received and processed. XCreateFontCursor(x-nontext-pointer-shape or XC_left_ptr) x_check_errors("bad nontext pointer cursor") XCreateFontCursor(x-hourglass-pointer-shape or XC_watch) x_check_errors(...etc...) XCreateFontCursor(x-mode-pointer-shape or XC_xterm) x_check_errors(...etc...) Several more XCreateFontCursor calls in a row. x_check_errors(...more generic message...) x_uncatch_errors Calls XSync to make sure we've received errors from any request sent since the last x_catch_errors or x_check_errors, and pops it off the stack. We do all of this in "x_set_mouse_color" because the cursor color is a property of the cursor object, so we create new cursors, set their colors, and then start using them in place of the old ones. So that's seven XSync calls, seven round trips, to make sure we catch any X server errors returned for this code and turn them into appropriate error messages. (Fun fact: Setting x-hourglass-pointer-shape to a bad value like 999 or "asdf" will prevent the tooltip frame from being created. Or any other X frame.) It's possible to look up the serial number of the next request to be sent to the server (XNextRequest), and the error handler gets a data structure that includes the serial number of the failing request (error_event->serial). So with some more work we could correlate one or more received errors with the requests we sent and pick which one we wanted to report on. (We'd have to deal with XCreateFontCursor potentially sending more than one X protocol request.) We'd still need an XSync at the end of the sequence to flush any pending errors. It occurs to me that maybe we can get rid of the XSync in x_catch_errors, if we record in the x_error_message_stack structure the serial number for the first request for which errors should be recorded there, using XNextRequest. If the error handler sees an older serial number in the error-event structure, then it looks at the next entry in the stack and tries again. Something similar may work for x_uncatch_errors too. Getting back to the trace from my test run, another case I see is x_real_pos_and_offsets. (Called when handle_one_xevent gets ConfigureNotify, presumably for the tooltip window.) It uses XQueryTree to walk up the window hierarchy to the root; the loop uses x_had_errors_p (which calls XSync) each time. It also calls XTranslateCoordinates and then x_had_errors_p. And XGetWindowProperty followed by x_had_errors_p. Since these routines normally return data from the server, if they get errors back, is it ever possible for them to return to their caller without having invoked the error handler on the error event structure? Have the error callback delayed somehow? Looking at some old xfree86 sources online (the first I found), I don't think so, and I have a tough time imagining how a robust package could be built otherwise. If we can rely on it, then in x_real_pos_and_offsets, immediately after functions like XQueryTree, XTranslateCoordinates, XGetWindowProperty, and XGetGeometry, we shouldn't need to call XSync to check whether errors happened. I don't know if there would be a better way to convey that information than extra arguments to the error-trapping routines, though. Below are the _XReply call stacks (with counts) I found once I worked up my color handling changes. There were 61 XSync calls in all, this time. This was for moving the mouse into the frame to the mode line (with focus elsewhere), and waiting for the tooltip to pop up. 5 _XReply =C2=AB XSync =C2=AB x_check_errors =C2=AB x_set_mouse_color= =C2=AB x_set_frame_parameters =C2=AB x_default_parameter =C2=AB x_create_t= ip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB fu= ncall_lambda =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda = =C2=AB Ffuncall =C2=AB run_hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_= code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall = =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call1 = =C2=AB timer_check_2 =C2=AB timer_check =C2=AB readable_events =C2=AB get_i= nput_pending 4 _XReply =C2=AB XSync =C2=AB x_had_errors_p =C2=AB x_real_pos_and_of= fsets =C2=AB x_real_positions =C2=AB handle_one_xevent =C2=AB XTread_socket= =C2=AB gobble_input =C2=AB handle_async_input =C2=AB process_pending_signa= ls =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2= =AB read_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB interna= l_condition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command= _loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XTranslateCoordinates =C2=AB x_real_pos_and_offsets = =C2=AB x_real_positions =C2=AB handle_one_xevent =C2=AB XTread_socket =C2= =AB gobble_input =C2=AB handle_async_input =C2=AB process_pending_signals = =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB r= ead_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_con= dition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_loop= =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB x_real_pos_and_= offsets =C2=AB x_real_positions =C2=AB handle_one_xevent =C2=AB XTread_sock= et =C2=AB gobble_input =C2=AB handle_async_input =C2=AB process_pending_sig= nals =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2= =AB read_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB interna= l_condition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command= _loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB xfont_list_patt= ern =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB font_open_by_spec =C2=AB font_open_by_nam= e =C2=AB x_default_font_parameter =C2=AB x_create_tip_frame =C2=AB Fx_show_= tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffun= call =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run= _hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda= =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB= funcall_lambda =C2=AB Ffuncall 2 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB get_current_wm_= state =C2=AB x_net_wm_state =C2=AB handle_one_xevent =C2=AB XTread_socket = =C2=AB gobble_input =C2=AB handle_async_input =C2=AB process_pending_signal= s =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB= read_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_c= ondition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_lo= op =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XSync =C2=AB x_had_errors_p =C2=AB x_wm_supports =C2= =AB do_ewmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_xevent = =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB p= rocess_pending_signals =C2=AB xg_select =C2=AB wait_reading_process_output = =C2=AB sit_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_loo= p_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB internal_ca= tch =C2=AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2= =AB main 2 _XReply =C2=AB XSync =C2=AB x_had_errors_p =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB font_open_by_spec =C2=AB font_open_by_nam= e =C2=AB x_default_font_parameter =C2=AB x_create_tip_frame =C2=AB Fx_show_= tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffun= call =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run= _hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda= =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB= funcall_lambda =C2=AB Ffuncall 2 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB x_real_pos_and_of= fsets =C2=AB x_real_positions =C2=AB handle_one_xevent =C2=AB XTread_socket= =C2=AB gobble_input =C2=AB handle_async_input =C2=AB process_pending_signa= ls =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2= =AB read_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB interna= l_condition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command= _loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB font_open_by_spec =C2=AB font_open_by_nam= e =C2=AB x_default_font_parameter =C2=AB x_create_tip_frame =C2=AB Fx_show_= tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffun= call =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run= _hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda= =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB= funcall_lambda =C2=AB Ffuncall 2 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB get_current_wm_st= ate =C2=AB x_net_wm_state =C2=AB handle_one_xevent =C2=AB XTread_socket =C2= =AB gobble_input =C2=AB handle_async_input =C2=AB process_pending_signals = =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB r= ead_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_con= dition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_loop= =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XQueryTree =C2=AB x_real_pos_and_offsets =C2=AB x_re= al_positions =C2=AB handle_one_xevent =C2=AB XTread_socket =C2=AB gobble_in= put =C2=AB handle_async_input =C2=AB process_pending_signals =C2=AB xg_sele= ct =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB read_char =C2= =AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_condition_case = =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_loop =C2=AB recu= rsive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XListFonts =C2=AB xfont_list_pattern =C2=AB xfont_li= st =C2=AB font_list_entities =C2=AB font_find_for_lface =C2=AB font_load_fo= r_lface =C2=AB font_open_by_spec =C2=AB font_open_by_name =C2=AB x_default_= font_parameter =C2=AB x_create_tip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall= =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_by= te_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run_hook_with_args =C2= =AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall = =C2=AB Fapply =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda = =C2=AB Ffuncall =C2=AB call1 2 _XReply =C2=AB XGetWindowProperty =C2=AB x_real_pos_and_offsets =C2= =AB x_real_positions =C2=AB handle_one_xevent =C2=AB XTread_socket =C2=AB g= obble_input =C2=AB handle_async_input =C2=AB process_pending_signals =C2=AB= xg_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB read_ch= ar =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_condition= _case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_loop =C2= =AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XGetWindowProperty =C2=AB get_current_wm_state =C2= =AB x_net_wm_state =C2=AB handle_one_xevent =C2=AB XTread_socket =C2=AB gob= ble_input =C2=AB handle_async_input =C2=AB process_pending_signals =C2=AB x= g_select =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB read_char= =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_condition_c= ase =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_loop =C2=AB = recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 2 _XReply =C2=AB XGetGeometry =C2=AB x_real_pos_and_offsets =C2=AB x_= real_positions =C2=AB handle_one_xevent =C2=AB XTread_socket =C2=AB gobble_= input =C2=AB handle_async_input =C2=AB process_pending_signals =C2=AB xg_se= lect =C2=AB wait_reading_process_output =C2=AB sit_for =C2=AB read_char =C2= =AB read_key_sequence =C2=AB command_loop_1 =C2=AB internal_condition_case = =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB command_loop =C2=AB recu= rsive_edit_1 =C2=AB Frecursive_edit =C2=AB main 1 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB x_wm_supports = =C2=AB do_ewmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_xeven= t =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB= process_pending_signals =C2=AB xg_select =C2=AB wait_reading_process_outpu= t =C2=AB sit_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_l= oop_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB internal_= catch =C2=AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit = =C2=AB main 1 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB x_set_mouse_col= or =C2=AB x_set_frame_parameters =C2=AB x_default_parameter =C2=AB x_create= _tip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB = funcall_lambda =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda = =C2=AB Ffuncall =C2=AB run_hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_= code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall = =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call1 = =C2=AB timer_check_2 =C2=AB timer_check =C2=AB readable_events =C2=AB get_i= nput_pending 1 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB xfont_list_patt= ern =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB x_supports_face_attributes_p =C2=AB Fdisplay_supports_f= ace_attributes_p =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambd= a =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffunca= ll =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_= byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call2 =C2=AB x_creat= e_tip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall 1 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB xfont_list_patt= ern =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB face_at_string_position =C2=AB note_mode_line_or_margin= _highlight =C2=AB note_mouse_highlight =C2=AB note_mouse_movement =C2=AB ha= ndle_one_xevent =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_asyn= c_input =C2=AB process_pending_signals =C2=AB xg_select =C2=AB wait_reading= _process_output =C2=AB kbd_buffer_get_event =C2=AB read_event_from_main_que= ue =C2=AB read_decoded_event_from_main_queue =C2=AB read_char =C2=AB read_k= ey_sequence =C2=AB command_loop_1 =C2=AB internal_condition_case =C2=AB com= mand_loop_2 1 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB xfont_list_patt= ern =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB face_at_buffer_position =C2=AB handle_face_prop =C2=AB = handle_stop =C2=AB start_display =C2=AB try_window =C2=AB Fx_show_tip =C2= =AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall = =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run_hook= _with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2= =AB Ffuncall =C2=AB Fapply 1 _XReply =C2=AB XSync =C2=AB x_uncatch_errors =C2=AB get_current_wm_= state =C2=AB do_ewmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one= _xevent =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input = =C2=AB process_pending_signals =C2=AB xg_select =C2=AB wait_reading_process= _output =C2=AB sit_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB com= mand_loop_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB int= ernal_catch =C2=AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_e= dit =C2=AB main 1 _XReply =C2=AB XSync =C2=AB x_sync =C2=AB x_wm_supports =C2=AB do_e= wmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_xevent =C2=AB XT= read_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB process_pe= nding_signals =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB si= t_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2= =AB internal_condition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2= =AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 1 _XReply =C2=AB XSync =C2=AB x_had_errors_p =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB x_supports_face_attributes_p =C2=AB Fdisplay_supports_f= ace_attributes_p =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambd= a =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffunca= ll =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_= byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call2 =C2=AB x_creat= e_tip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall 1 _XReply =C2=AB XSync =C2=AB x_had_errors_p =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB face_at_string_position =C2=AB note_mode_line_or_margin= _highlight =C2=AB note_mouse_highlight =C2=AB note_mouse_movement =C2=AB ha= ndle_one_xevent =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_asyn= c_input =C2=AB process_pending_signals =C2=AB xg_select =C2=AB wait_reading= _process_output =C2=AB kbd_buffer_get_event =C2=AB read_event_from_main_que= ue =C2=AB read_decoded_event_from_main_queue =C2=AB read_char =C2=AB read_k= ey_sequence =C2=AB command_loop_1 =C2=AB internal_condition_case =C2=AB com= mand_loop_2 1 _XReply =C2=AB XSync =C2=AB x_had_errors_p =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB face_at_buffer_position =C2=AB handle_face_prop =C2=AB = handle_stop =C2=AB start_display =C2=AB try_window =C2=AB Fx_show_tip =C2= =AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall = =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run_hook= _with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2= =AB Ffuncall =C2=AB Fapply 1 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB x_wm_supports =C2= =AB do_ewmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_xevent = =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB p= rocess_pending_signals =C2=AB xg_select =C2=AB wait_reading_process_output = =C2=AB sit_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_loo= p_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB internal_ca= tch =C2=AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2= =AB main 1 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB x_set_mouse_color= =C2=AB x_set_frame_parameters =C2=AB x_default_parameter =C2=AB x_create_t= ip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB fu= ncall_lambda =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda = =C2=AB Ffuncall =C2=AB run_hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_= code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall = =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call1 = =C2=AB timer_check_2 =C2=AB timer_check =C2=AB readable_events =C2=AB get_i= nput_pending 1 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB x_supports_face_attributes_p =C2=AB Fdisplay_supports_f= ace_attributes_p =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambd= a =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffunca= ll =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_= byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call2 =C2=AB x_creat= e_tip_frame =C2=AB Fx_show_tip =C2=AB Ffuncall 1 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB face_at_string_position =C2=AB note_mode_line_or_margin= _highlight =C2=AB note_mouse_highlight =C2=AB note_mouse_movement =C2=AB ha= ndle_one_xevent =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_asyn= c_input =C2=AB process_pending_signals =C2=AB xg_select =C2=AB wait_reading= _process_output =C2=AB kbd_buffer_get_event =C2=AB read_event_from_main_que= ue =C2=AB read_decoded_event_from_main_queue =C2=AB read_char =C2=AB read_k= ey_sequence =C2=AB command_loop_1 =C2=AB internal_condition_case =C2=AB com= mand_loop_2 1 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB xfont_list_patter= n =C2=AB xfont_list =C2=AB font_list_entities =C2=AB font_find_for_lface = =C2=AB font_load_for_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB= lookup_face =C2=AB face_at_buffer_position =C2=AB handle_face_prop =C2=AB = handle_stop =C2=AB start_display =C2=AB try_window =C2=AB Fx_show_tip =C2= =AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall = =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run_hook= _with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2= =AB Ffuncall =C2=AB Fapply 1 _XReply =C2=AB XSync =C2=AB x_catch_errors =C2=AB get_current_wm_st= ate =C2=AB do_ewmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_x= event =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input = =C2=AB process_pending_signals =C2=AB xg_select =C2=AB wait_reading_process= _output =C2=AB sit_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB com= mand_loop_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB int= ernal_catch =C2=AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_e= dit =C2=AB main 1 _XReply =C2=AB XQueryPointer =C2=AB compute_tip_xy =C2=AB Fx_show_t= ip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffunc= all =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run_= hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda = =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB = funcall_lambda =C2=AB Ffuncall =C2=AB call1 =C2=AB timer_check_2 =C2=AB tim= er_check =C2=AB readable_events =C2=AB get_input_pending =C2=AB detect_inpu= t_pending_run_timers =C2=AB wait_reading_process_output =C2=AB sit_for =C2= =AB read_char 1 _XReply =C2=AB XParseColor =C2=AB x_parse_color =C2=AB x_defined_co= lor =C2=AB x_decode_color =C2=AB x_set_background_color =C2=AB x_set_frame_= parameters =C2=AB x_default_parameter =C2=AB x_create_tip_frame =C2=AB Fx_s= how_tip =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB = Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB= run_hook_with_args =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_la= mbda =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffuncall =C2=AB exec_byte_code = =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB call1 =C2=AB timer_check_2 =C2= =AB timer_check 1 _XReply =C2=AB XListFonts =C2=AB xfont_list_pattern =C2=AB xfont_li= st =C2=AB font_list_entities =C2=AB font_find_for_lface =C2=AB font_load_fo= r_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB lookup_face =C2=AB= x_supports_face_attributes_p =C2=AB Fdisplay_supports_face_attributes_p = =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall= =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_by= te_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB = funcall_lambda =C2=AB Ffuncall =C2=AB call2 =C2=AB x_create_tip_frame =C2= =AB Fx_show_tip =C2=AB Ffuncall =C2=AB exec_byte_code 1 _XReply =C2=AB XListFonts =C2=AB xfont_list_pattern =C2=AB xfont_li= st =C2=AB font_list_entities =C2=AB font_find_for_lface =C2=AB font_load_fo= r_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB lookup_face =C2=AB= face_at_string_position =C2=AB note_mode_line_or_margin_highlight =C2=AB n= ote_mouse_highlight =C2=AB note_mouse_movement =C2=AB handle_one_xevent =C2= =AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB proc= ess_pending_signals =C2=AB xg_select =C2=AB wait_reading_process_output =C2= =AB kbd_buffer_get_event =C2=AB read_event_from_main_queue =C2=AB read_deco= ded_event_from_main_queue =C2=AB read_char =C2=AB read_key_sequence =C2=AB = command_loop_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB = internal_catch 1 _XReply =C2=AB XListFonts =C2=AB xfont_list_pattern =C2=AB xfont_li= st =C2=AB font_list_entities =C2=AB font_find_for_lface =C2=AB font_load_fo= r_lface =C2=AB realize_x_face =C2=AB realize_face =C2=AB lookup_face =C2=AB= face_at_buffer_position =C2=AB handle_face_prop =C2=AB handle_stop =C2=AB = start_display =C2=AB try_window =C2=AB Fx_show_tip =C2=AB Ffuncall =C2=AB e= xec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB exec_byte_code = =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB run_hook_with_args =C2=AB Ffun= call =C2=AB exec_byte_code =C2=AB funcall_lambda =C2=AB Ffuncall =C2=AB Fap= ply =C2=AB Ffuncall 1 _XReply =C2=AB XGetWindowProperty =C2=AB x_wm_supports =C2=AB do_ew= mh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_xevent =C2=AB XTr= ead_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB process_pen= ding_signals =C2=AB xg_select =C2=AB wait_reading_process_output =C2=AB sit= _for =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_loop_1 =C2=AB= internal_condition_case =C2=AB command_loop_2 =C2=AB internal_catch =C2=AB= command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2=AB main 1 _XReply =C2=AB XGetWindowProperty =C2=AB get_current_wm_state =C2= =AB do_ewmh_fullscreen =C2=AB x_check_fullscreen =C2=AB handle_one_xevent = =C2=AB XTread_socket =C2=AB gobble_input =C2=AB handle_async_input =C2=AB p= rocess_pending_signals =C2=AB xg_select =C2=AB wait_reading_process_output = =C2=AB sit_for =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_loo= p_1 =C2=AB internal_condition_case =C2=AB command_loop_2 =C2=AB internal_ca= tch =C2=AB command_loop =C2=AB recursive_edit_1 =C2=AB Frecursive_edit =C2= =AB main 1 _XReply =C2=AB XGetSelectionOwner =C2=AB Fx_selection_exists_p =C2= =AB Ffuncall =C2=AB exec_byte_code =C2=AB Ffuncall =C2=AB Fapply =C2=AB Ffu= ncall =C2=AB exec_byte_code =C2=AB Ffuncall =C2=AB exec_byte_code =C2=AB fu= ncall_lambda =C2=AB Ffuncall =C2=AB eval_sub =C2=AB Feval =C2=AB internal_c= ondition_case_1 =C2=AB menu_item_eval_property =C2=AB parse_tool_bar_item = =C2=AB process_tool_bar_item =C2=AB map_keymap_item =C2=AB map_keymap_inter= nal =C2=AB map_keymap =C2=AB tool_bar_items =C2=AB update_tool_bar =C2=AB p= repare_menu_bars =C2=AB redisplay_internal =C2=AB redisplay_preserve_echo_a= rea =C2=AB read_char =C2=AB read_key_sequence =C2=AB command_loop_1