From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.help Subject: Re: closing emacsclient always focuses another emacs window Date: Mon, 10 Mar 2014 23:11:20 +0100 Message-ID: <87eh29puuv.fsf@web.de> References: <83pplwq0s2.fsf@gnu.org> <83ob1gpw98.fsf@gnu.org> <9cc39d8d-e5ae-488b-9ba6-78dd71a2257f@googlegroups.com> <913ee34a-f81c-408f-afe4-6944a9c56430@googlegroups.com> <10020dec-82f2-41de-93d3-06d8984dcfba@googlegroups.com> <87pplv6omp.fsf@web.de> <831tyapvp6.fsf@gnu.org> <87wqg28ykt.fsf@web.de> <83y50inhn7.fsf@gnu.org> <87eh29zvtb.fsf@web.de> <83r469om72.fsf@gnu.org> <83ppltokzh.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1394489512 12223 80.91.229.3 (10 Mar 2014 22:11:52 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 10 Mar 2014 22:11:52 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Mon Mar 10 23:12:01 2014 Return-path: Envelope-to: geh-help-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 1WN8QS-0008Kp-Uu for geh-help-gnu-emacs@m.gmane.org; Mon, 10 Mar 2014 23:12:01 +0100 Original-Received: from localhost ([::1]:51404 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WN8QS-0004P4-G4 for geh-help-gnu-emacs@m.gmane.org; Mon, 10 Mar 2014 18:12:00 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:38873) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WN8QC-0004Ow-SI for help-gnu-emacs@gnu.org; Mon, 10 Mar 2014 18:11:50 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WN8Q7-00025q-1P for help-gnu-emacs@gnu.org; Mon, 10 Mar 2014 18:11:44 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:38598) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WN8Q6-00025i-Rb for help-gnu-emacs@gnu.org; Mon, 10 Mar 2014 18:11:38 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1WN8Q3-0007u0-8m for help-gnu-emacs@gnu.org; Mon, 10 Mar 2014 23:11:35 +0100 Original-Received: from ip-90-186-176-150.web.vodafone.de ([90.186.176.150]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 10 Mar 2014 23:11:35 +0100 Original-Received: from michael_heerdegen by ip-90-186-176-150.web.vodafone.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 10 Mar 2014 23:11:35 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 80 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: ip-90-186-176-150.web.vodafone.de User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) Cancel-Lock: sha1:ei0VEEsq3VePmYFcwFLIAG+lbdc= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:96410 Archived-At: Eli Zaretskii writes: > Also, selecting a frame doesn't mean that frame gets focus, even for > GUI frames. There's always a selected frame in Emacs, but focus might > well belong to another application, so we could have a situation where > none of the Emacs frames has focus. I know that. But in the problematic case, after the xterm has got focus, `server-switch-buffer' explicitly sets focus back to the selected frame: (when server-raise-frame (select-frame-set-input-focus (window-frame))) I have a recipe that reproduces the problem in 100% of the cases, and I'm sure that the window manager isn't involved: 1. start xterm 2. emacs -Q 3. M-x server-start 4. Focus the xterm 5. emacsclient -c /path/to/file1 & A new emacs frame pops up and has focus 6. close the _other_ Emacs frame (the one showing the *scratch* buffer) 7. Focus the xterm 8. emacsclient -c /path/to/file2 & A new emacs frame pops up, showing file2, and has focus. 9. in this frame: C-x # Now, the other Emacs frame has focus, not the xterm. It would be very interesting if you could not reproduce this. It is IMHO inevitable when I look at the code. Eli, if you really don't see this behavior, please try to find out which of the following is not true for you, after hitting C-x # in 9. These steps _prove_ that what the OP sees will happen with the above recipe: - `server-edit' evaluates (apply 'server-switch-buffer (server-done)) because `server-clients is non-nil - (server-done) is evaluated. It deletes the current frame. xterm gets focus. `server-done' returns a list whose car is nil. The `selected-frame' is now the one showing file1 (it's the only frame left), but it doesn't have focus. But, of course, Emacs continues evaluating. - `server-switch-buffer' is applied to the result of (server-done). It evaluates this: if (null next-buffer) (progn (let ((rest server-clients)) (while (and rest (not next-buffer)) (let ((proc (car rest))) ;; Only look at frameless clients, or those in the selected ;; frame. (when (or (not (process-get proc 'frame)) (eq (process-get proc 'frame) (selected-frame))) (setq next-buffer (car (process-get proc 'buffers)))) (setq rest (cdr rest))))) (and next-buffer (server-switch-buffer next-buffer killed-one)) next-buffer is set to the buffer associated with file1, and `server-switch-buffer' is called recursively. - At the end of the recursive `server-switch-buffer' call, this is evaluated: (when server-raise-frame (select-frame-set-input-focus (window-frame))) which sets input focus to the Emacs frame. Regards, Michael.