]> git.eshelyaron.com Git - emacs.git/commitdiff
New frame parameter 'drag-with-tab-line' (Bug#49247)
authorMartin Rudalics <rudalics@gmx.at>
Fri, 2 Jul 2021 08:55:42 +0000 (10:55 +0200)
committerMartin Rudalics <rudalics@gmx.at>
Fri, 2 Jul 2021 08:55:42 +0000 (10:55 +0200)
The new frame parameter 'drag-with-tab-line' allows to move
frames by dragging their topmost windows' tab line with the
mouse thus achieving a behavior similar to that provided by
the 'drag-with-header-line' parameter.

* lisp/mouse.el (mouse-drag-tab-line): New function.
(mouse-drag-frame-resize, mouse-drag-frame-move)
([tab-line down-mouse-1]): Handle tab line dragging in various
keymaps.
* doc/lispref/frames.texi (Mouse Dragging Parameters): Describe
new parameter 'drag-with-tab-line'.
* etc/NEWS: Add entry for 'drag-with-tab-line'.

doc/lispref/frames.texi
etc/NEWS
lisp/mouse.el

index a9d20c543da8c10aa5dbfd6a1207761f23eae1c9..25706befc8d882485e5674ce5fc9c1fcd0007c78 100644 (file)
@@ -2023,8 +2023,8 @@ the @sc{cdr} of the cell is either @code{t} or @code{top-only}.
 
 The parameters described below provide support for resizing a frame by
 dragging its internal borders with the mouse.  They also allow moving a
-frame with the mouse by dragging the header line of its topmost or the
-mode line of its bottommost window.
+frame with the mouse by dragging the header or tab line of its topmost
+or the mode line of its bottommost window.
 
 These parameters are mostly useful for child frames (@pxref{Child
 Frames}) that come without window manager decorations.  If necessary,
@@ -2041,6 +2041,11 @@ borders, if present, with the mouse.
 If non-@code{nil}, the frame can be moved with the mouse by dragging the
 header line of its topmost window.
 
+@vindex drag-with-tab-line@r{, a frame parameter}
+@item drag-with-tab-line
+If non-@code{nil}, the frame can be moved with the mouse by dragging the
+tab line of its topmost window.
+
 @vindex drag-with-mode-line@r{, a frame parameter}
 @item drag-with-mode-line
 If non-@code{nil}, the frame can be moved with the mouse by dragging the
index 605c4d228fcd63eaba62ca9f88515ff34702d532..5b04278e3aac96280935c613568823437da893df 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -319,6 +319,10 @@ Meta characters to Emacs, e.g., send "ESC x" when the user types
 emulators by using the new input-meta-mode with the special value
 'encoded' with these terminal emulators.
 
++++
+** New frame parameter 'drag-with-tab-line'.
+This parameter, similar to 'drag-with-header-line', allows moving frames
+by dragging the tab lines of their topmost windows with the mouse.
 \f
 * Editing Changes in Emacs 28.1
 
index d0064eecfc7f6b56ee954fc27531bd02b4c1f30e..ab260d4ed4992674d7c0ea04037dd04d18e876c5 100644 (file)
@@ -550,6 +550,18 @@ the frame instead."
         (when (frame-parameter frame 'drag-with-header-line)
           (mouse-drag-frame-move start-event))))))
 
+(defun mouse-drag-tab-line (start-event)
+  "Drag frame with tab line in its topmost window.
+START-EVENT is the starting mouse event of the drag action."
+  (interactive "e")
+  (let* ((start (event-start start-event))
+        (window (posn-window start)))
+    (when (and (window-live-p window)
+               (window-at-side-p window 'top))
+      (let ((frame (window-frame window)))
+        (when (frame-parameter frame 'drag-with-tab-line)
+          (mouse-drag-frame-move start-event))))))
+
 (defun mouse-drag-vertical-line (start-event)
   "Change the width of a window by dragging on a vertical line.
 START-EVENT is the starting mouse event of the drag action."
@@ -678,6 +690,7 @@ frame with the mouse."
              ;; with a mode-line, header-line or vertical-line prefix ...
              (define-key map [mode-line] map)
              (define-key map [header-line] map)
+             (define-key map [tab-line] map)
              (define-key map [vertical-line] map)
              ;; ... and some maybe even with a right- or bottom-divider
              ;; prefix.
@@ -904,6 +917,7 @@ frame with the mouse."
              ;; with a mode-line, header-line or vertical-line prefix ...
              (define-key map [mode-line] map)
              (define-key map [header-line] map)
+             (define-key map [tab-line] map)
              (define-key map [vertical-line] map)
              ;; ... and some maybe even with a right- or bottom-divider
              ;; prefix.
@@ -2908,6 +2922,7 @@ is copied instead of being cut."
 ;; versions.
 (global-set-key [header-line down-mouse-1] 'mouse-drag-header-line)
 (global-set-key [header-line mouse-1] 'mouse-select-window)
+(global-set-key [tab-line down-mouse-1] 'mouse-drag-tab-line)
 (global-set-key [tab-line mouse-1] 'mouse-select-window)
 ;; (global-set-key [mode-line drag-mouse-1] 'mouse-select-window)
 (global-set-key [mode-line down-mouse-1] 'mouse-drag-mode-line)