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, 22 Nov 2018 01:35:00 +0200	[thread overview]
Message-ID: <87y39m9f8b.fsf@mail.linkov.net> (raw)
In-Reply-To: <5BA490EA.4000502@gmx.at> (martin rudalics's message of "Fri, 21 Sep 2018 08:34:18 +0200")

>> 0. emacs -Q
>>
>> 1. C-h e
>>
>> 2. C-x o
>>
>> 3. C-x 2
>>
>> 4. C-x 0
>>
>> It's expected that point will remain where it was visually on the screen,
>> just will relocate to the window that takes place of the deleted window,
>> but point jumps to an unexpected place in the opposite part of the frame.
>
> What should Emacs do instead?

One possible solution is to implement directional window deletion.
The following patch allows using the prefix argument that will delete
the selected window and select the window at the given direction.

This makes possible this workflow:

0. emacs -Q -mm

1. eval: (windmove-delete-default-keybindings)

2. C-h e

3. C-x o

4. C-x 2

5. C-h i

6. C-u C-x S-down

and after deleting of the selected window, the cursor stays in the same place,
and doesn't jump to the opposite part of the frame.

diff --git a/lisp/windmove.el b/lisp/windmove.el
index 898f87e2db..9a7a2b80f2 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -678,6 +678,74 @@ windmove-display-default-keybindings
   (global-set-key (vector (append modifiers '(down)))  'windmove-display-down)
   (global-set-key (vector (append modifiers '(?0)))    'windmove-display-same-window))
 
+;;; Directional window deletion
+
+(defun windmove-delete-in-direction (dir &optional arg)
+  "Delete the window at direction DIR.
+If prefix ARG is `C-u', delete the selected window and
+select the window at direction DIR."
+  (let ((other-window (window-in-direction dir nil nil arg
+                                           windmove-wrap-around t)))
+    (cond ((null other-window)
+           (user-error "No window %s from selected window" dir))
+          ((and (window-minibuffer-p other-window)
+                (not (minibuffer-window-active-p other-window)))
+           (user-error "Minibuffer is inactive"))
+          (t
+           (if (not (consp arg))
+               (delete-window other-window)
+             (delete-window (selected-window))
+             (select-window other-window))))))
+
+;;;###autoload
+(defun windmove-delete-left (&optional arg)
+  "Delete the window to the left of the current one.
+If prefix ARG is `C-u', delete the selected window and
+select the window that was to the left of the current one."
+  (interactive "P")
+  (windmove-delete-in-direction 'left arg))
+
+;;;###autoload
+(defun windmove-delete-up (&optional arg)
+  "Delete the window above the current one.
+If prefix ARG is `C-u', delete the selected window and
+select the window that was above the current one."
+  (interactive "P")
+  (windmove-delete-in-direction 'up arg))
+
+;;;###autoload
+(defun windmove-delete-right (&optional arg)
+  "Delete the window to the right of the current one.
+If prefix ARG is `C-u', delete the selected window and
+select the window that was to the right of the current one."
+  (interactive "P")
+  (windmove-delete-in-direction 'right arg))
+
+;;;###autoload
+(defun windmove-delete-down (&optional arg)
+  "Delete the window below the current one.
+If prefix ARG is `C-u', delete the selected window and
+select the window that was below the current one."
+  (interactive "P")
+  (windmove-delete-in-direction 'down arg))
+
+;;;###autoload
+(defun windmove-delete-default-keybindings (&optional prefix modifiers)
+  "Set up keybindings for directional window deletion.
+Keys are bound to commands that delete windows in the specified
+direction.  Keybindings are of the form PREFIX MODIFIERS-{left,right,up,down},
+where PREFIX is a prefix key and MODIFIERS is either a list of modifiers or
+a single modifier.  Default value of PREFIX is `C-x' and MODIFIERS is `shift'."
+  (interactive)
+  (unless prefix (setq prefix '(?\C-x)))
+  (unless (listp prefix) (setq prefix (list prefix)))
+  (unless modifiers (setq modifiers '(shift)))
+  (unless (listp modifiers) (setq modifiers (list modifiers)))
+  (global-set-key (vector prefix (append modifiers '(left)))  'windmove-delete-left)
+  (global-set-key (vector prefix (append modifiers '(right))) 'windmove-delete-right)
+  (global-set-key (vector prefix (append modifiers '(up)))    'windmove-delete-up)
+  (global-set-key (vector prefix (append modifiers '(down)))  'windmove-delete-down))
+
 (provide 'windmove)
 
 ;;; windmove.el ends here





  parent reply	other threads:[~2018-11-21 23:35 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
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 [this message]
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=87y39m9f8b.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).