unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@linkov.net>
To: martin rudalics <rudalics@gmx.at>
Cc: 32790@debbugs.gnu.org
Subject: bug#32790: 27.0.50; point jumps unexpectedly after delete-window
Date: Thu, 08 Nov 2018 23:53:23 +0200	[thread overview]
Message-ID: <87bm6zme24.fsf@mail.linkov.net> (raw)
In-Reply-To: <5BE2AF28.2020505@gmx.at> (martin rudalics's message of "Wed, 07 Nov 2018 10:23:52 +0100")

In bug#33258 I tried to use inhibit-select-window in
display-buffer-overriding-action, but it's better just to use
a prefix arg to determine whether the window should remain selected,
e.g. ‘C-u S-M-up’ means no-select, or ‘M-- S-M-left’ means no-select
and use the bottom egde, etc.

The only problem is that I can't decide what window to use for
window-in-direction and split-window in display-buffer-overriding-action:
an original window that was selected at the moment of ‘S-M-up’ invocation,
or a selected window that is current at the moment when
display-buffer-overriding-action is applied?  Please see
the questions in the comments of this patch:

diff --git a/lisp/windmove.el b/lisp/windmove.el
index 598e495c7a..ea4506049b 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -1,4 +1,4 @@
-;;; windmove.el --- directional window-selection routines
+;;; windmove.el --- directional window-selection routines  -*- lexical-binding:t -*-
 ;;
 ;; Copyright (C) 1998-2018 Free Software Foundation, Inc.
 ;;
@@ -571,6 +571,104 @@ windmove-default-keybindings
   (global-set-key (vector (append modifiers '(up)))    'windmove-up)
   (global-set-key (vector (append modifiers '(down)))  'windmove-down))
 
+;;; Directional window display
+
+(defun windmove-display-in-direction (dir &optional arg)
+  "Display the next buffer in the window at direction DIR.
+Create a new window if there is no window in that direction.
+If prefix ARG is `C-u' or `M--', restore the previously selected window.
+With no prefix ARG, or with prefix ARG equal to zero, a displayed window is
+relative to the position of point in the selected window; otherwise it is
+relative to the first edge (for positive ARG or `C-u') or the last edge
+(for negative ARG or `M--') of the selected window."
+  (interactive)
+  (let* ((command this-command)
+         (action display-buffer-overriding-action)
+         (minibuffer-depth (minibuffer-depth))
+         (selected-window (selected-window))
+         (restore-window (or (consp arg) (eq arg '-)))
+         (clearfun (make-symbol "clear-display-buffer-overriding-action"))
+         (exitfun
+          (lambda ()
+            (setq display-buffer-overriding-action action)
+            (when (and restore-window (window-live-p selected-window))
+              (select-window selected-window))
+            (remove-hook 'post-command-hook clearfun))))
+    (fset clearfun
+          (lambda ()
+            (unless (or
+		     ;; Remove the hook immediately
+		     ;; after exiting the minibuffer.
+		     (> (minibuffer-depth) minibuffer-depth)
+		     ;; But don't remove immediately after
+		     ;; adding the hook by the same command below.
+		     (eq this-command command))
+              (funcall exitfun))))
+    (add-hook 'post-command-hook clearfun)
+    (push (lambda (buffer alist)
+	    (unless (> (minibuffer-depth) minibuffer-depth)
+	      (let ((window (if (eq dir 'same-window)
+			        (selected-window) ;; or maybe `selected-window'?
+                              (window-in-direction
+                               dir selected-window nil ;; or `nil' instead of `selected-window'?
+                               (and arg (prefix-numeric-value arg))
+                               windmove-wrap-around)))
+                    (type 'reuse))
+                (unless window
+		  ;; maybe use `selected-window' in WINDOW arg of split-window?
+                  (setq window (split-window nil nil dir) type 'window))
+		(window--display-buffer buffer window type alist))))
+          display-buffer-overriding-action)
+    (message "[display-%s]" dir)))
+
+;;;###autoload
+(defun windmove-display-left (&optional arg)
+  "Display the next buffer in window to the left of the current one.
+With a prefix argument, restore the previously selected window."
+  (interactive "P")
+  (windmove-display-in-direction 'left arg))
+
+;;;###autoload
+(defun windmove-display-up (&optional arg)
+  "Display the next buffer in window above the current one.
+With a prefix argument, restore the previously selected window."
+  (interactive "P")
+  (windmove-display-in-direction 'up arg))
+
+;;;###autoload
+(defun windmove-display-right (&optional arg)
+  "Display the next buffer in window to the right of the current one.
+With a prefix argument, restore the previously selected window."
+  (interactive "P")
+  (windmove-display-in-direction 'right arg))
+
+;;;###autoload
+(defun windmove-display-down (&optional arg)
+  "Display the next buffer in window below the current one.
+With a prefix argument, restore the previously selected window."
+  (interactive "P")
+  (windmove-display-in-direction 'down arg))
+
+;;;###autoload
+(defun windmove-display-same-window (&optional arg)
+  "Display the next buffer in the same window."
+  (interactive "P")
+  (windmove-display-in-direction 'same-window arg))
+
+;;;###autoload
+(defun windmove-display-default-keybindings (&optional modifiers)
+  "Set up keybindings for directional display.
+Keybindings are of the form MODIFIERS-{left,right,up,down},
+where MODIFIERS is either a list of modifiers or a single modifier.
+Default value of MODIFIERS is `shift-meta'."
+  (interactive)
+  (unless modifiers (setq modifiers '(shift meta)))
+  (unless (listp modifiers) (setq modifiers (list modifiers)))
+  (global-set-key (vector (append modifiers '(left)))  'windmove-display-left)
+  (global-set-key (vector (append modifiers '(right))) 'windmove-display-right)
+  (global-set-key (vector (append modifiers '(up)))    'windmove-display-up)
+  (global-set-key (vector (append modifiers '(down)))  'windmove-display-down)
+  (global-set-key (vector (append modifiers '(?0)))    'windmove-display-same-window))
 
 (provide 'windmove)
 





  parent reply	other threads:[~2018-11-08 21:53 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-20 23:33 bug#32790: 27.0.50; point jumps unexpectedly after delete-window Juri Linkov
2018-09-21  6:34 ` martin rudalics
2018-09-22 22:23   ` Juri Linkov
2018-09-23  5:44     ` Eli Zaretskii
2018-09-23  8:27     ` martin rudalics
2018-09-23 20:57       ` Juri Linkov
2018-09-24  8:33         ` martin rudalics
2018-09-24 18:49           ` Juri Linkov
2018-09-25  7:28             ` martin rudalics
2018-09-25 19:28               ` Juri Linkov
2018-09-26  8:51                 ` martin rudalics
2018-09-26 23:05                   ` Juri Linkov
2018-09-27 18:44                     ` martin rudalics
2018-10-15 21:12                       ` Juri Linkov
2018-10-16  8:46                         ` martin rudalics
2018-10-16 22:20                           ` Juri Linkov
2018-10-17  7:30                             ` martin rudalics
2018-10-17 21:30                               ` Juri Linkov
2018-10-18  8:05                                 ` martin rudalics
2018-10-18 22:49                                   ` Juri Linkov
2018-10-19  7:39                                     ` martin rudalics
2018-10-20 21:27                                       ` Juri Linkov
2018-10-21  8:22                                         ` martin rudalics
2018-10-21 18:17                                           ` Juri Linkov
2018-10-22  9:07                                             ` martin rudalics
2018-10-23 20:55                                               ` Juri Linkov
2018-10-24  9:45                                                 ` martin rudalics
2018-10-25 20:48                                                   ` Juri Linkov
2018-10-26  7:41                                                     ` martin rudalics
2018-10-27 19:51                                                       ` Juri Linkov
2018-10-28  8:59                                                         ` martin rudalics
2018-10-28 19:36                                                           ` Juri Linkov
2018-10-29  8:44                                                             ` martin rudalics
2018-10-29 13:45                                                             ` martin rudalics
2018-10-29 22:38                                                               ` Juri Linkov
2018-10-30  9:00                                                                 ` martin rudalics
2018-10-30 21:42                                                                   ` Juri Linkov
2018-10-31  8:11                                                                     ` martin rudalics
2018-10-31 21:20                                                                       ` Juri Linkov
2018-11-01  9:03                                                                         ` martin rudalics
2018-11-01 22:42                                                                           ` Juri Linkov
2018-11-02  8:44                                                                             ` martin rudalics
2018-11-02 14:36                                                                               ` Drew Adams
2018-11-04 22:01                                                                               ` Juri Linkov
2018-11-05  9:35                                                                                 ` martin rudalics
2018-11-04 22:21                                                                               ` Juri Linkov
2018-11-05  9:36                                                                                 ` martin rudalics
2018-11-05 22:14                                                                                   ` Juri Linkov
2018-11-06  8:48                                                                                     ` martin rudalics
2018-11-06 22:22                                                                                       ` Juri Linkov
2018-11-07  9:23                                                                                         ` martin rudalics
2018-11-07 21:44                                                                                           ` Juri Linkov
2018-11-08  8:52                                                                                             ` martin rudalics
2018-11-08 21:38                                                                                               ` Juri Linkov
2018-11-09  9:08                                                                                                 ` martin rudalics
2018-11-10 21:25                                                                                                   ` Juri Linkov
2018-12-26  2:04                                                                                                 ` Dmitry Gutov
2018-11-08 21:53                                                                                           ` Juri Linkov [this message]
2018-11-09  9:13                                                                                             ` martin rudalics
2018-11-10 21:37                                                                                               ` Juri Linkov
2018-11-11  8:51                                                                                                 ` martin rudalics
2018-11-12 23:24                                                                                                   ` Juri Linkov
2018-11-13  9:08                                                                                                     ` martin rudalics
2018-11-13 23:20                                                                                                       ` Juri Linkov
2018-11-14  8:33                                                                                                         ` martin rudalics
2018-11-15  0:15                                                                                                           ` Juri Linkov
2018-11-15  9:13                                                                                                             ` martin rudalics
2018-11-15 22:59                                                                                                               ` Juri Linkov
2018-11-16  8:53                                                                                                                 ` martin rudalics
2018-11-17 22:18                                                                                                                   ` Juri Linkov
2018-11-18  9:24                                                                                                                     ` martin rudalics
2018-11-18 22:52                                                                                                                       ` Juri Linkov
2018-11-19  9:42                                                                                                                         ` martin rudalics
2018-11-19 22:39                                                                                                                           ` Juri Linkov
2018-11-20  9:28                                                                                                                             ` martin rudalics
2018-11-21  0:12                                                                                                                               ` Juri Linkov
2018-11-21  8:19                                                                                                                                 ` martin rudalics
2018-11-21 23:38                                                                                                                                   ` Juri Linkov
2018-11-22  7:40                                                                                                                                     ` martin rudalics
2018-11-22 22:45                                                                                                                                       ` Juri Linkov
2018-11-23  7:39                                                                                                                                         ` martin rudalics
2018-11-24 23:40                                                                                                                                           ` Juri Linkov
2018-11-25  8:23                                                                                                                                             ` martin rudalics
2018-11-25 21:01                                                                                                                                               ` Juri Linkov
2018-11-26  9:33                                                                                                                                                 ` martin rudalics
2018-11-26 23:47                                                                                                                                                   ` Juri Linkov
2018-11-27  6:00                                                                                                                                                     ` Eli Zaretskii
2018-11-27 23:18                                                                                                                                                       ` Juri Linkov
2018-11-28  8:33                                                                                                                                                         ` martin rudalics
2018-11-28 23:25                                                                                                                                                           ` Juri Linkov
2018-11-29  8:30                                                                                                                                                             ` martin rudalics
2018-11-29 22:50                                                                                                                                                               ` Juri Linkov
2018-11-30  8:22                                                                                                                                                                 ` martin rudalics
2018-12-01 22:43                                                                                                                                                                   ` Juri Linkov
2018-12-02  8:34                                                                                                                                                                     ` martin rudalics
2018-12-03  0:45                                                                                                                                                                       ` Juri Linkov
2018-12-03  7:45                                                                                                                                                                         ` martin rudalics
2018-12-20 23:28                                                                                                                                                                           ` Juri Linkov
2018-12-21  9:14                                                                                                                                                                             ` martin rudalics
2018-12-22 23:34                                                                                                                                                                               ` Juri Linkov
2018-12-23  9:40                                                                                                                                                                                 ` martin rudalics
2018-11-27  8:08                                                                                                                                                     ` martin rudalics
2018-11-04 22:07                               ` Juri Linkov
2018-11-05  9:35                                 ` martin rudalics
2018-11-05 22:12                                   ` Juri Linkov
2018-11-06  8:47                                     ` martin rudalics
2018-11-21 23:35   ` Juri Linkov
2018-11-22  7:40     ` martin rudalics
2018-11-22 22:39       ` Juri Linkov
2018-11-23  7:40         ` martin rudalics
2018-11-24 23:20           ` Juri Linkov
2018-11-25  8:24             ` martin rudalics
2018-11-26 23:53       ` Juri Linkov
2018-11-27  8:08         ` martin rudalics
2018-11-27 23:28           ` Juri Linkov
2018-11-28  8:33             ` martin rudalics
2018-09-21  6:55 ` Eli Zaretskii
2018-09-22 22:34   ` Juri Linkov
2018-09-23  8:28     ` martin rudalics
2018-09-23 10:56     ` Eli Zaretskii
2018-09-23 20:49       ` Juri Linkov
2018-09-24  8:23         ` martin rudalics
2018-09-24  8:30           ` Eli Zaretskii
2018-09-24 12:25             ` martin rudalics
2018-09-24 18:53           ` Juri Linkov
2018-09-25  7:28             ` martin rudalics
2019-11-24 23:19 ` Juri Linkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87bm6zme24.fsf@mail.linkov.net \
    --to=juri@linkov.net \
    --cc=32790@debbugs.gnu.org \
    --cc=rudalics@gmx.at \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).