dotfiles/emacs-lisp/windows_and_frames.org
magic_rb 97941f8724
Visual changes in windows_and_frames.org + scroll settings
Signed-off-by: magic_rb <magic_rb@redalder.org>
2024-07-24 21:28:42 +02:00

2.8 KiB

Windows and Frames

  (add-to-list 'default-frame-alist '(alpha-background . 80))

Disable changing windows by mouse clicks. Advise mouse-set-point, mouse-drag-region, and mouse-set-region and prevent them from executing if the current window and target window are different.

  (defun cv/mouse-set-point (fun event &optional promote)
    (let ((window (posn-window (event-start event))))
      (when (equal window (selected-window))
        (funcall fun event promote))))
  (advice-add 'mouse-set-point :around 'cv/mouse-set-point)

  (defun cv/mouse-drag-region (fun event)
     (let ((window-end (posn-window (event-end event))))
       (when (equal window-end (selected-window))
        (funcall fun event))))
  (advice-add 'mouse-drag-region :around 'cv/mouse-drag-region)

  (defun cv/mouse-set-region (fun event)
     (let ((window (posn-window (event-start event))))
       (when (equal window (selected-window))
        (funcall fun event))))
  (advice-add 'mouse-set-region :around 'cv/mouse-set-region)

When a frame is deleted, check whether it is dedicated and if it is, delete its buffer too.

  (defun maybe-delete-frame-buffer (frame)
    "When a dedicated FRAME is deleted, also kill its buffer.
  A dedicated frame contains a single window whose buffer is not
  displayed anywhere else."
    (let ((windows (window-list frame)))
      (when (eq 1 (length windows))
        (let ((buffer (window-buffer (car windows))))
          (when (eq 1 (length (get-buffer-window-list buffer nil t)))
            (when (frame-parameter frame 'unsplittable)
              (with-current-buffer buffer
                (when (equal major-mode #'vterm-mode) (kill-process (get-buffer-process buffer)))
                (kill-buffer buffer))))))))
  (add-to-list 'delete-frame-functions #'maybe-delete-frame-buffer)

Mouse Interaction

Don't use the dialog box for asking questions when triggered by the mouse.

  (setq use-dialog-box nil)

Don't ask for files using the file dialog.

  (setq use-file-dialog nil)

Buffers

Don't allow the deletion of the *scratch* and *Messages* buffers.

  (with-current-buffer "*scratch*"  (emacs-lock-mode 'kill))
  (with-current-buffer "*Messages*" (emacs-lock-mode 'kill))

Scrolling

  (use-package scrolling
    :no-require t
    :ensure nil
    :custom
    (auto-window-vscroll nil)
    (hscroll-margin 5)
    (hscroll-step 0)
    (scroll-margin 5)
    (scroll-step 0)
    (scroll-preserve-screen-position t))