Skip to content

Commit 52801f8

Browse files
committed
Fix rendering twice
1 parent 91d7f2d commit 52801f8

File tree

3 files changed

+31
-29
lines changed

3 files changed

+31
-29
lines changed

Eask

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
(depends-on "emacs" "26.1")
1515

16-
(depends-on "flycheck")
1716
(depends-on "sideline")
17+
(depends-on "flycheck")
1818

1919
(setq network-security-level 'low) ; see https://github.com/jcs090218/setup-emacs-windows/issues/156#issuecomment-932956432

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
:init
1515
(setq sideline-backends-right '(sideline-flycheck)))
1616

17-
(leaf sideline-flycheck :hook (flycheck-mode-hook . sideline-flycheck-mode))
17+
(leaf sideline-flycheck :hook (flycheck-mode-hook . sideline-flycheck-setup))
1818
```
1919

2020
## Contribute

sideline-flycheck.el

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
;; Description: Show flycheck errors with sideline
88
;; Keyword: sideline flycheck
99
;; Version: 0.1.0
10-
;; Package-Requires: ((emacs "26.1") (flycheck "0.14") (sideline "0.1.0"))
10+
;; Package-Requires: ((emacs "26.1") (sideline "0.1.0") (flycheck "0.14"))
1111
;; URL: https://github.com/jcs-elpa/sideline-flycheck
1212

1313
;; This file is NOT part of GNU Emacs.
@@ -34,8 +34,8 @@
3434

3535
(require 'cl-lib)
3636

37-
(require 'flycheck)
3837
(require 'sideline)
38+
(require 'flycheck)
3939

4040
(defgroup sideline-flycheck nil
4141
"Show flycheck errors with sideline."
@@ -54,43 +54,45 @@
5454
(defvar-local sideline-flycheck--callback nil
5555
"Callback to display errors with sideline.")
5656

57-
(defun sideline-flycheck--get-candidates (callback &rest _)
58-
"Asynchronous get flycheck errors."
59-
(setq sideline-flycheck--callback callback))
60-
61-
(defun sideline-flycheck--show (errors)
62-
"Display ERRORS, using sideline.el library."
63-
(when (and errors
64-
(not (run-hook-with-args-until-success 'sideline-flycheck-inhibit-functions))
65-
sideline-flycheck--callback)
66-
(funcall sideline-flycheck--callback (mapcar #'flycheck-error-message errors))))
57+
(defvar-local sideline-flycheck--cleared-p nil
58+
"Set to t when ready to do next rendering in sideline.")
6759

6860
;;;###autoload
6961
(defun sideline-flycheck (command)
7062
"Backend for sideline.
7163

7264
Argument COMMAND is required in sideline backend."
7365
(cl-case command
74-
(`candidates (cons :async #'sideline-flycheck--get-candidates))))
66+
(`candidates (cons :async
67+
(lambda (callback &rest _)
68+
(setq sideline-flycheck--callback callback))))))
69+
70+
(defun sideline-flycheck--show (errors)
71+
"Display ERRORS, using sideline.el library."
72+
(when (and errors
73+
(not (run-hook-with-args-until-success 'sideline-flycheck-inhibit-functions))
74+
sideline-flycheck--callback
75+
sideline-flycheck--cleared-p)
76+
(setq sideline-flycheck--cleared-p nil)
77+
(funcall sideline-flycheck--callback (mapcar #'flycheck-error-message errors))))
78+
79+
(defun sideline-flycheck--reset ()
80+
"After sideline is reset."
81+
(setq sideline-flycheck--cleared-p t))
7582

7683
;;;###autoload
77-
(define-minor-mode sideline-flycheck-mode
78-
"A minor mode to show Flycheck error messages in a sideline."
79-
:lighter nil
80-
:group 'sideline-flycheck
84+
(defun sideline-flycheck-setup ()
85+
"Setup for `flycheck-mode'."
8186
(cond
82-
;; Use our display function and remember the old one but only if we haven't
83-
;; yet configured it, to avoid activating twice.
84-
((and sideline-flycheck-mode
85-
(not (eq flycheck-display-errors-function #'sideline-flycheck--show)))
87+
(flycheck-mode
8688
(setq sideline-flycheck--old-display-function flycheck-display-errors-function)
87-
(setq-local flycheck-display-errors-function #'sideline-flycheck--show))
88-
;; Reset the display function and remove ourselves from all hooks but only
89-
;; if the mode is still active.
90-
((and (not sideline-flycheck-mode)
91-
(eq flycheck-display-errors-function #'sideline-flycheck--show))
89+
(setq-local flycheck-display-errors-function #'sideline-flycheck--show)
90+
(add-hook 'sideline-reset-hook #'sideline-flycheck--reset nil t))
91+
(t
9292
(setq-local flycheck-display-errors-function sideline-flycheck--old-display-function)
93-
(setq sideline-flycheck--old-display-function nil))))
93+
(setq sideline-flycheck--old-display-function nil)
94+
(remove-hook 'sideline-reset-hook #'sideline-flycheck--reset t)
95+
(sideline-render)))) ; rerender sideline once
9496

9597
(provide 'sideline-flycheck)
9698
;;; sideline-flycheck.el ends here

0 commit comments

Comments
 (0)