Change doom/toggle-line-numbers to cycle styles #376

Also fixes doom/toggle-line-numbers when doom-line-numbers-style is nil.
This commit is contained in:
Henrik Lissner 2018-01-30 01:10:16 -05:00
parent 1fda25ce9a
commit 01787fc876
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 37 additions and 27 deletions

View file

@ -9,21 +9,34 @@
(unless (frame-parameter nil 'fullscreen) (unless (frame-parameter nil 'fullscreen)
'fullboth))) 'fullboth)))
(defvar doom--line-number-style doom-line-numbers-style)
;;;###autoload ;;;###autoload
(defun doom/toggle-line-numbers (&optional arg) (defun doom/toggle-line-numbers ()
"Toggle `linum-mode'." "Toggle line numbers.
(interactive "P")
Cycles through regular, relative and no line numbers. The order depends on what
`doom-line-numbers-style' is set to.
Uses `display-line-numbers' in Emacs 26+ and `nlinum-mode' everywhere else."
(interactive)
(let* ((order (pcase doom-line-numbers-style
(`relative '(relative t nil))
(`t '(t relative nil))
(`nil '(nil t relative))))
(queue (memq doom--line-number-style order))
(next (if (= (length queue) 1)
(car order)
(car (cdr queue)))))
(setq doom--line-number-style next)
(cond ((boundp 'display-line-numbers) (cond ((boundp 'display-line-numbers)
(setq display-line-numbers (setq display-line-numbers next))
(pcase arg
('(4) 'relative)
(1 t)
(-1 nil)
(_ (not display-line-numbers)))))
((featurep 'nlinum) ((featurep 'nlinum)
(nlinum-mode (or arg (if nlinum-mode -1 +1)))) (pcase next
(`t (nlinum-relative-mode -1) (nlinum-mode +1))
(`relative (nlinum-relative-mode +1))
(`nil (nlinum-mode -1))))
(t (t
(error "No line number plugin detected")))) (error "No line number plugin detected")))))
;;;###autoload ;;;###autoload
(defun doom-resize-window (window new-size &optional horizontal force-p) (defun doom-resize-window (window new-size &optional horizontal force-p)

View file

@ -319,13 +319,15 @@ DEFAULT is non-nil, set the default mode-line for all buffers."
;; ;;
(defvar doom-line-numbers-style t (defvar doom-line-numbers-style t
"The style to use for the line number display. "The default styles to use for the line number display.
Accepts the same arguments as `display-line-numbers', which are: Takes the same argument as `display-line-numbers' in Emacs 26, which are:
nil No line numbers nil No line numbers
t Ordinary line numbers t Ordinary line numbers
'relative Relative line numbers") 'relative Relative line numbers
Use `doom/toggle-line-numbers' to cycle between these line number styles.")
(defun doom|enable-line-numbers (&optional arg) (defun doom|enable-line-numbers (&optional arg)
"Enables the display of line numbers, using `display-line-numbers' (in Emacs "Enables the display of line numbers, using `display-line-numbers' (in Emacs
@ -333,13 +335,9 @@ t Ordinary line numbers
See `doom-line-numbers-style' to control the style of line numbers to display." See `doom-line-numbers-style' to control the style of line numbers to display."
(cond ((boundp 'display-line-numbers) (cond ((boundp 'display-line-numbers)
(setq display-line-numbers (setq display-line-numbers (unless (eq arg -1) doom-line-numbers-style)))
(pcase arg
(+1 doom-line-numbers-style)
(-1 nil)
(_ doom-line-numbers-style))))
((eq doom-line-numbers-style 'relative) ((eq doom-line-numbers-style 'relative)
(if (= arg -1) (if (eq arg -1)
(nlinum-relative-off) (nlinum-relative-off)
(nlinum-relative-on))) (nlinum-relative-on)))
((not (null doom-line-numbers-style)) ((not (null doom-line-numbers-style))
@ -418,8 +416,7 @@ character that looks like a space that `whitespace-mode' won't affect.")
(def-package! nlinum-relative (def-package! nlinum-relative
:unless (boundp 'display-line-numbers) :unless (boundp 'display-line-numbers)
:commands nlinum-relative-mode :commands nlinum-relative-mode
:config :config (after! evil (nlinum-relative-setup-evil)))
(after! evil (nlinum-relative-setup-evil)))
;; ;;