replace hard-coded values by variables: max frames and max windows
This commit is contained in:
parent
ed2e4722a3
commit
6078468da6
|
@ -86,6 +86,10 @@ return a number to have it assigned to the current-window, nil otherwise."
|
||||||
:group 'window-numbering
|
:group 'window-numbering
|
||||||
:type 'integer)
|
:type 'integer)
|
||||||
|
|
||||||
|
(defcustom window-numbering--window-number-max 10
|
||||||
|
"Max number of windows that can be numbered."
|
||||||
|
:group 'window-numbering
|
||||||
|
:type 'integer)
|
||||||
|
|
||||||
(defface window-numbering-face '()
|
(defface window-numbering-face '()
|
||||||
"Face used for the number in the mode-line."
|
"Face used for the number in the mode-line."
|
||||||
|
@ -117,7 +121,7 @@ return a number to have it assigned to the current-window, nil otherwise."
|
||||||
(window-numbering--deinit)))
|
(window-numbering--deinit)))
|
||||||
|
|
||||||
;; define interactive functions window-numbering-select-window-[0..n]
|
;; define interactive functions window-numbering-select-window-[0..n]
|
||||||
(dotimes (i 10)
|
(dotimes (i window-numbering--window-number-max)
|
||||||
(eval `(defun ,(intern (format "select-window-%s" i)) (&optional arg)
|
(eval `(defun ,(intern (format "select-window-%s" i)) (&optional arg)
|
||||||
,(format "Jump to window %d.\nIf prefix ARG is given, delete the\
|
,(format "Jump to window %d.\nIf prefix ARG is given, delete the\
|
||||||
window instead of selecting it." i)
|
window instead of selecting it." i)
|
||||||
|
@ -142,7 +146,7 @@ If prefix ARG is given, delete the window instead of selecting it."
|
||||||
window-numbering--frames-table))
|
window-numbering--frames-table))
|
||||||
window-numbering--window-vector))
|
window-numbering--window-vector))
|
||||||
window)
|
window)
|
||||||
(if (and (>= i 0) (< i 10)
|
(if (and (>= i 0) (< i window-numbering--window-number-max)
|
||||||
(setq window (aref windows i)))
|
(setq window (aref windows i)))
|
||||||
window
|
window
|
||||||
(error "No window numbered %s" i))))
|
(error "No window numbered %s" i))))
|
||||||
|
@ -204,11 +208,7 @@ WINDOW: if specified, the window of which we want to know the number.
|
||||||
|
|
||||||
;; Internal variables
|
;; Internal variables
|
||||||
|
|
||||||
(defvar window-numbering--window-number-max 10 ;; TODO replace hard-coded values
|
(defvar window-numbering--max-frames 16
|
||||||
;; by this var
|
|
||||||
"Max number of windows that can be numbered.")
|
|
||||||
|
|
||||||
(defvar window-numbering--max-frames-count 16
|
|
||||||
"Maximum number of frames that can be numbered.")
|
"Maximum number of frames that can be numbered.")
|
||||||
|
|
||||||
(defvar window-numbering--window-vector nil
|
(defvar window-numbering--window-vector nil
|
||||||
|
@ -239,35 +239,32 @@ Such a structure allows for per-frame bidirectional fast access.")
|
||||||
|
|
||||||
(defun window-numbering--init ()
|
(defun window-numbering--init ()
|
||||||
"Initialize window-numbering-mode."
|
"Initialize window-numbering-mode."
|
||||||
(unless window-numbering--frames-table
|
(if (eq window-numbering-scope 'frame-local)
|
||||||
(save-excursion ;; TODO is this really needed ?
|
(setq window-numbering--frames-table (make-hash-table :size window-numbering--max-frames))
|
||||||
(if (eq window-numbering-scope 'frame-local)
|
(setq window-numbering--numbers-table (make-hash-table :size window-numbering--window-number-max)))
|
||||||
(setq window-numbering--frames-table (make-hash-table :size 16))
|
(window-numbering-install-mode-line)
|
||||||
(setq window-numbering--numbers-table (make-hash-table :size 10)))
|
(add-hook 'minibuffer-setup-hook 'window-numbering--update)
|
||||||
(window-numbering-install-mode-line)
|
(add-hook 'window-configuration-change-hook 'window-numbering--update)
|
||||||
(add-hook 'minibuffer-setup-hook 'window-numbering--update)
|
(dolist (frame (frame-list))
|
||||||
(add-hook 'window-configuration-change-hook
|
(select-frame frame)
|
||||||
'window-numbering--update)
|
(window-numbering--update)))
|
||||||
(dolist (frame (frame-list))
|
|
||||||
(select-frame frame)
|
|
||||||
(window-numbering--update)))))
|
|
||||||
|
|
||||||
(defun window-numbering--deinit ()
|
(defun window-numbering--deinit ()
|
||||||
"Actions performed when turning off window-numbering-mode."
|
"Actions performed when turning off window-numbering-mode."
|
||||||
(window-numbering-clear-mode-line)
|
(window-numbering-clear-mode-line)
|
||||||
(remove-hook 'minibuffer-setup-hook 'window-numbering--update)
|
(remove-hook 'minibuffer-setup-hook 'window-numbering--update)
|
||||||
(remove-hook 'window-configuration-change-hook
|
(remove-hook 'window-configuration-change-hook 'window-numbering--update)
|
||||||
'window-numbering--update)
|
|
||||||
(setq window-numbering--frames-table nil))
|
(setq window-numbering--frames-table nil))
|
||||||
|
|
||||||
(defun window-numbering--update ()
|
(defun window-numbering--update ()
|
||||||
"Update window numbers."
|
"Update window numbers."
|
||||||
(setq window-numbering--remaining (window-numbering--get-available-numbers))
|
(setq window-numbering--remaining (window-numbering--available-numbers))
|
||||||
(if (eq window-numbering-scope 'frame-local)
|
(if (eq window-numbering-scope 'frame-local)
|
||||||
(puthash (selected-frame)
|
(puthash (selected-frame)
|
||||||
(cons (make-vector 10 nil) (make-hash-table :size 10))
|
(cons (make-vector window-numbering--window-number-max nil)
|
||||||
|
(make-hash-table :size window-numbering--window-number-max))
|
||||||
window-numbering--frames-table)
|
window-numbering--frames-table)
|
||||||
(setq window-numbering--window-vector (make-vector 10 nil))
|
(setq window-numbering--window-vector (make-vector window-numbering--window-number-max nil))
|
||||||
(clrhash window-numbering--numbers-table))
|
(clrhash window-numbering--numbers-table))
|
||||||
(when (and window-numbering-auto-assign-0-to-minibuffer
|
(when (and window-numbering-auto-assign-0-to-minibuffer
|
||||||
(active-minibuffer-window))
|
(active-minibuffer-window))
|
||||||
|
@ -353,19 +350,13 @@ This hashtable is not stored the same way depending on the value of
|
||||||
window-numbering--frames-table))
|
window-numbering--frames-table))
|
||||||
window-numbering--numbers-table))
|
window-numbering--numbers-table))
|
||||||
|
|
||||||
(defun window-numbering--get-available-numbers (&optional windows)
|
(defun window-numbering--available-numbers ()
|
||||||
"Return a list of numbers currently available for assignment.
|
"Return a list of numbers from 1 to `window-numbering--window-number-max'.
|
||||||
WINDOWS: a vector of currently assigned windows."
|
0 is the last element of the list."
|
||||||
;; TODO simplify, the WINDOWS argument is not needed in the current
|
(let ((numbers))
|
||||||
;; implementation.
|
(dotimes (i window-numbering--window-number-max)
|
||||||
(let ((i 9)
|
(push (% (1+ i) window-numbering--window-number-max) numbers))
|
||||||
left)
|
(nreverse numbers)))
|
||||||
(while (>= i 0)
|
|
||||||
(let ((window (when windows (aref windows i))))
|
|
||||||
(unless window
|
|
||||||
(push (% (1+ i) 10) left)))
|
|
||||||
(decf i))
|
|
||||||
left))
|
|
||||||
|
|
||||||
(defun window-numbering--switch-to-window (window)
|
(defun window-numbering--switch-to-window (window)
|
||||||
"Switch to the window WINDOW and switch input focus if on a different frame."
|
"Switch to the window WINDOW and switch input focus if on a different frame."
|
||||||
|
|
Loading…
Reference in a new issue