update packages

This commit is contained in:
2021-01-08 19:32:30 +01:00
parent ce8f24d28a
commit f5649dceab
467 changed files with 26642 additions and 22487 deletions

View File

@@ -1,17 +1,17 @@
;;; visual-fill-column.el --- fill-column for visual-line-mode -*- lexical-binding: t -*-
;; Copyright (C) 2015-2019 Joost Kremers
;; Copyright (C) 2015-2020 Joost Kremers
;; Copyright (C) 2016 Martin Rudalics
;; All rights reserved.
;; Author: Joost Kremers <joostkremers@fastmail.fm>
;; Maintainer: Joost Kremers <joostkremers@fastmail.fm>
;; URL: https://github.com/joostkremers/visual-fill-column
;; Package-Version: 20200428.816
;; Package-Commit: 64d38bc1c00953be05c193c01332a633be67aac2
;; Package-Version: 20201229.2303
;; Package-Commit: 5b08b9ae9da5b95e42e94e4c9ec01d63e8848ea2
;; Created: 2015
;; Version: 1.11
;; Package-Requires: ((emacs "24.3"))
;; Version: 2.2
;; Package-Requires: ((emacs "25.1"))
;; This file is NOT part of GNU Emacs.
@@ -30,11 +30,11 @@
;;; Commentary:
;; `visual-fill-column-mode' is a small Emacs minor mode that mimics the effect of `fill-column'
;; in `visual-line-mode'. Instead of wrapping lines at the window edge, which
;; is the standard behaviour of `visual-line-mode', it wraps lines at
;; `fill-column'. If `fill-column' is too large for the window, the text is
;; wrapped at the window edge.
;; `visual-fill-column-mode' is a small Emacs minor mode that mimics the effect
;; of `fill-column' in `visual-line-mode'. Instead of wrapping lines at the
;; window edge, which is the standard behaviour of `visual-line-mode', it wraps
;; lines at `fill-column'. If `fill-column' is too large for the window, the
;; text is wrapped at the window edge.
;;; Code:
@@ -52,6 +52,19 @@ this option is set to a value, it is used instead."
(make-variable-buffer-local 'visual-fill-column-width)
(put 'visual-fill-column-width 'safe-local-variable 'numberp)
(defcustom visual-fill-column-extra-text-width nil
"Additional columns added to the text area.
This is a cons cell of two numbers: the first is subtracted from
the left margin, the second from the right margin. This option
can be used to accommodate, e.g,, line numbers, which would
otherwise reduce the actual size of the text area."
:group 'visual-fill-column
:type '(choice (const :tag "No extra text width" :value nil)
(cons :tag "Extra text width"
(integer :tag "Extra width left ")
(integer :tag "Extra width right"))))
(make-variable-buffer-local 'visual-fill-column-extra-text-width)
(defcustom visual-fill-column-fringes-outside-margins t
"Put the fringes outside the margins."
:group 'visual-fill-column
@@ -68,19 +81,61 @@ this option is set to a value, it is used instead."
(make-variable-buffer-local 'visual-fill-column-center-text)
(put 'visual-fill-column-center-text 'safe-local-variable 'symbolp)
(defcustom visual-fill-column-inhibit-sensible-window-split nil
"Do not set `split-window-preferred-function' to allow vertical window splits.
By default, `split-window-preferred-function' is set to
`visual-fill-column-split-window-sensibly', in order to allow
`display-buffer' to split windows in two side-by-side windows.
Unset this option if you wish to use your custom function for
`split-window-sensibly'."
:group 'visual-fill-column
:type '(choice (const :tag "Allow vertical window split" nil)
(const :tag "Use standard window split" t)))
(defvar visual-fill-column--use-split-window-parameter nil "If set, the window parameter `split-window' is used.")
(defvar visual-fill-column--min-margins nil "Width of the margins before invoking `visual-fill-column-mode'.")
(make-variable-buffer-local 'visual-fill-column--min-margins)
(defvar visual-fill-column--original-split-window-function nil "The value of `split-window-preferred-function'.")
(defvar visual-fill-column-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [right-margin mouse-1] (global-key-binding [mouse-1])) ; #'mouse-set-point
(define-key map [right-margin mouse-2] (global-key-binding [mouse-2])) ; #'mouse-yank-primary
(define-key map [right-margin mouse-3] (global-key-binding [mouse-3])) ; #'mouse-save-then-kill
(define-key map [right-margin drag-mouse-1] #'ignore)
(define-key map [right-margin drag-mouse-2] #'ignore)
(define-key map [right-margin drag-mouse-3] #'ignore)
(define-key map [right-margin double-mouse-1] #'ignore)
(define-key map [right-margin double-mouse-2] #'ignore)
(define-key map [right-margin double-mouse-3] #'ignore)
(define-key map [right-margin triple-mouse-1] #'ignore)
(define-key map [right-margin triple-mouse-2] #'ignore)
(define-key map [right-margin triple-mouse-3] #'ignore)
(define-key map [left-margin mouse-1] (global-key-binding [mouse-1])) ; #'mouse-set-point
(define-key map [left-margin mouse-2] (global-key-binding [mouse-2])) ; #'mouse-yank-primary
(define-key map [left-margin mouse-3] (global-key-binding [mouse-3])) ; #'mouse-save-then-kill
(define-key map [left-margin drag-mouse-1] #'ignore)
(define-key map [left-margin drag-mouse-2] #'ignore)
(define-key map [left-margin drag-mouse-3] #'ignore)
(define-key map [left-margin double-mouse-1] #'ignore)
(define-key map [left-margin double-mouse-2] #'ignore)
(define-key map [left-margin double-mouse-3] #'ignore)
(define-key map [left-margin triple-mouse-1] #'ignore)
(define-key map [left-margin triple-mouse-2] #'ignore)
(define-key map [left-margin triple-mouse-3] #'ignore)
(when (bound-and-true-p mouse-wheel-mode)
(define-key map [right-margin mouse-wheel-down-event] #'mwheel-scroll)
(define-key map [right-margin mouse-wheel-up-event] #'mwheel-scroll)
(define-key map [left-margin mouse-wheel-down-event] #'mwheel-scroll)
(define-key map [left-margin mouse-wheel-up-event] #'mwheel-scroll))
map))
;;;###autoload
(define-minor-mode visual-fill-column-mode
"Wrap lines according to `fill-column' in `visual-line-mode'."
:init-value nil :lighter nil :global nil
:keymap
(let ((map (make-sparse-keymap)))
(when (bound-and-true-p mouse-wheel-mode)
(progn
(define-key map (vector 'left-margin mouse-wheel-down-event) 'mwheel-scroll)
(define-key map (vector 'left-margin mouse-wheel-up-event) 'mwheel-scroll)
(define-key map (vector 'right-margin mouse-wheel-down-event) 'mwheel-scroll)
(define-key map (vector 'right-margin mouse-wheel-up-event) 'mwheel-scroll))
map))
(if visual-fill-column-mode
(visual-fill-column-mode--enable)
(visual-fill-column-mode--disable)))
@@ -95,27 +150,45 @@ this option is set to a value, it is used instead."
Note that `visual-fill-column-mode' is only turned on in buffers
in which Visual Line mode is active as well, and only in buffers
that actually visit a file."
(when (and visual-line-mode
buffer-file-name)
(when buffer-file-name
(visual-fill-column-mode 1)))
(defun visual-fill-column-mode--enable ()
"Set up `visual-fill-column-mode' for the current buffer."
(add-hook 'window-configuration-change-hook #'visual-fill-column--adjust-window 'append 'local)
(if (>= emacs-major-version 26)
(add-hook 'window-size-change-functions #'visual-fill-column--adjust-frame 'append))
(visual-fill-column--adjust-window))
(add-hook 'window-configuration-change-hook #'visual-fill-column--adjust-all-windows 'append 'local)
(add-hook 'window-size-change-functions #'visual-fill-column--adjust-window 'append 'local)
(when (not visual-fill-column-inhibit-sensible-window-split)
(setq visual-fill-column--original-split-window-function split-window-preferred-function)
(setq-default split-window-preferred-function #'visual-fill-column-split-window-sensibly))
(when (version<= emacs-version "27.1")
(setq visual-fill-column--use-split-window-parameter t))
(when (version< "27.1" emacs-version)
(let ((margins (window-margins (selected-window))))
(setq visual-fill-column--min-margins (cons (or (car margins) 0)
(or (cdr margins) 0)))))
(visual-fill-column--adjust-window (selected-window)))
(defun visual-fill-column-mode--disable ()
"Disable `visual-fill-column-mode' for the current buffer."
(remove-hook 'window-configuration-change-hook #'visual-fill-column--adjust-window 'local)
(set-window-fringes (get-buffer-window (current-buffer)) nil)
(set-window-margins (get-buffer-window (current-buffer)) nil))
(if (<= emacs-major-version 26)
(remove-hook 'window-configuration-change-hook #'visual-fill-column--adjust-window 'local))
(remove-hook 'window-size-change-functions #'visual-fill-column--adjust-window 'local)
(let ((window (get-buffer-window (current-buffer))))
(set-window-margins window (car visual-fill-column--min-margins) (cdr visual-fill-column--min-margins))
(set-window-fringes window nil)
(set-window-parameter window 'min-margins nil)
(kill-local-variable 'visual-fill-column--min-margins)))
(defun visual-fill-column-split-window (&optional window size side pixelwise)
(defun visual-fill-column-split-window (&optional window size side)
"Split WINDOW, unsetting its margins first.
SIZE, SIDE, and PIXELWISE are passed on to `split-window'. This
function is for use in the window parameter `split-window'."
SIZE, and SIDE are passed on to `split-window'. This function is
for use in the window parameter `split-window'."
;; Note: `split-window' has another optional argument, `pixelwise', but this
;; is not passed to the function in the `split-window' window parameter.
(let ((horizontal (memq side '(t left right)))
margins new)
(when horizontal
@@ -125,7 +198,7 @@ function is for use in the window parameter `split-window'."
;; Now try to split the window.
(set-window-parameter window 'split-window nil)
(unwind-protect
(setq new (split-window window size side pixelwise))
(setq new (split-window window size side))
(set-window-parameter window 'split-window #'visual-fill-column-split-window)
;; Restore old margins if we failed.
(when (and horizontal (not new))
@@ -137,11 +210,11 @@ function is for use in the window parameter `split-window'."
This function unsets the window margins and calls
`split-window-sensibly'.
By default, `split-window-sensibly' does not split a window
vertically if it has wide margins, even if there is enough space
for a vertical split. This function can be used as the value of
`split-window-preferred-function' to enable vertically splitting
windows with wide margins."
By default, `split-window-sensibly' does not split a window in
two side-by-side windows if it has wide margins, even if there is
enough space for a vertical split. This function is used as the
value of `split-window-preferred-function' to allow
`display-buffer' to split such windows."
(let ((margins (window-margins window))
new)
;; unset the margins and try to split the window
@@ -152,21 +225,32 @@ windows with wide margins."
(when (not new)
(set-window-margins window (car margins) (cdr margins))))))
(defun visual-fill-column--adjust-window ()
"Adjust the window margins and fringes."
;; Only run when we're really looking at a buffer that has v-f-c-mode enabled. See #22.
(when (buffer-local-value 'visual-fill-column-mode (window-buffer (selected-window)))
(set-window-fringes (get-buffer-window (current-buffer)) nil nil visual-fill-column-fringes-outside-margins)
(if (>= emacs-major-version 25)
(set-window-parameter (get-buffer-window (current-buffer)) 'split-window #'visual-fill-column-split-window))
(visual-fill-column--set-margins)))
(defun visual-fill-column--reset-window (window)
"Reset the parameters and margins of WINDOW."
(set-window-parameter window 'split-window nil)
(set-window-parameter window 'min-margins nil)
(set-window-margins window nil))
(defun visual-fill-column--adjust-frame (frame)
"Adjust the windows of FRAME."
(mapc (lambda (w)
(with-selected-window w
(visual-fill-column--adjust-window)))
(window-list frame :never)))
(defun visual-fill-column--adjust-window (&optional window)
"Adjust the margins and fringes of WINDOW.
WINDOW defaults to the selected window. This function only
adjusts the margins and fringes if the buffer displayed in the
selected window has `visual-fill-column-mode' enabled."
(or window (setq window (selected-window)))
(with-selected-window window
(visual-fill-column--reset-window window)
(when visual-fill-column-mode
(set-window-fringes window nil nil visual-fill-column-fringes-outside-margins)
(if visual-fill-column--use-split-window-parameter
(set-window-parameter window 'split-window #'visual-fill-column-split-window))
(if visual-fill-column--min-margins ; This is non-nil if the window parameter `min-margins' is used (Emacs 27.2).
(set-window-parameter window 'min-margins visual-fill-column--min-margins))
(visual-fill-column--set-margins window))))
(defun visual-fill-column--adjust-all-windows ()
"Adjust margins of all windows displaying the current buffer."
(mapc #'visual-fill-column--adjust-window
(get-buffer-window-list (current-buffer) 'no-minibuffer 'visible)))
(defun visual-fill-column-adjust (&optional _inc)
"Adjust the window margins and fringes.
@@ -174,16 +258,16 @@ This function is for use as advice to `text-scale-adjust'. It
calls `visual-fill-column--adjust-window', but only if
`visual-fill-column' is active."
(if visual-fill-column-mode
(visual-fill-column--adjust-window)))
(visual-fill-column--adjust-window (selected-window))))
(defun visual-fill-column--window-max-text-width (&optional window)
"Return the maximum possible text width of WINDOW.
The maximum possible text width is the width of the current text
area plus the margins, but excluding the fringes, scroll bar and
area plus the margins, but excluding the fringes, scroll bar, and
right divider. WINDOW defaults to the selected window. The
return value is scaled to account for `text-scale-mode-amount'
and `text-scale-mode-step'."
(or window (setq window (get-buffer-window (current-buffer))))
(or window (setq window (selected-window)))
(let* ((margins (window-margins window))
(buffer (window-buffer window))
(scale (if (and (boundp 'text-scale-mode-step)
@@ -194,18 +278,21 @@ and `text-scale-mode-step'."
1.0)))
(truncate (/ (+ (window-width window)
(or (car margins) 0)
(or (cdr margins) 0)
(or (and (boundp 'display-line-numbers-width)
(numberp display-line-numbers-width)
(- display-line-numbers-width))
0))
(or (cdr margins) 0))
(float scale)))))
(defun visual-fill-column--set-margins ()
"Set window margins for the current window."
;; calculate left & right margins
(let* ((window (get-buffer-window (current-buffer)))
(total-width (visual-fill-column--window-max-text-width window))
(defun visual-fill-column--add-extra-width (left right add-width)
"Calculate new margins given additional text width.
LEFT and RIGHT are the current margins, ADD-WIDTH a cons cell of
additional columns to be added to the text area. Return a cons
cell of the new margins, which will never be less than zero."
(cons (max 0 (- left (car add-width)))
(max 0 (- right (cdr add-width)))))
(defun visual-fill-column--set-margins (window)
"Set window margins for WINDOW."
;; Calculate left & right margins.
(let* ((total-width (visual-fill-column--window-max-text-width window))
(width (or visual-fill-column-width
fill-column))
(margins (if (< (- total-width width) 0) ; margins must be >= 0
@@ -216,6 +303,11 @@ and `text-scale-mode-step'."
0))
(right (- margins left)))
(if visual-fill-column-extra-text-width
(let ((add-width (visual-fill-column--add-extra-width left right visual-fill-column-extra-text-width)))
(setq left (car add-width)
right (cdr add-width))))
;; put an explicitly R2L buffer on the right side of the window
(when (and (eq bidi-paragraph-direction 'right-to-left)
(= left 0))