[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/valign e2a2a85 085/198: Rework hooks
From: |
Stefan Monnier |
Subject: |
[elpa] externals/valign e2a2a85 085/198: Rework hooks |
Date: |
Tue, 1 Dec 2020 18:19:22 -0500 (EST) |
branch: externals/valign
commit e2a2a858c803ca8e2008a3718e4611bb166d08a8
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Rework hooks
* valign.el (valign--org-mode-hook, valign--markdown-mode-hook):
Merge functions.
(valign--add-to-jit-lock): Merge to this function.
(valign--remove-from-jit-lock): New function.
(valign--realign-on-refontification): Rename function.
(valign--align-buffer-on-fontification): Rename to this function.
(valign--force-window-update-advice): Remove function.
(valign-mode): Group hooks together. Add valign--remove-from-jit-lock
when disabling the mode.
---
valign.el | 123 ++++++++++++++++++++++++++++----------------------------------
1 file changed, 55 insertions(+), 68 deletions(-)
diff --git a/valign.el b/valign.el
index 7e5add0..6f56e46 100644
--- a/valign.el
+++ b/valign.el
@@ -600,11 +600,21 @@ for the former, and 'multi-column for the latter."
;;; Mode intergration
-(defun valign--org-mode-hook ()
- "Valign hook function used by `org-mode'."
+(defun valign--add-to-jit-lock ()
+ "Add valig hook to jit-lock."
;; Our alignment function should run after font-lock, so it’s
;; text properties are not mangled by that of font-lock.
- (add-hook 'jit-lock-functions #'valign-initial-alignment 98 t))
+ (add-hook 'jit-lock-functions #'valign-initial-alignment 98 t)
+ (add-function :after (local 'font-lock-fontify-region)
+ #'valign-initial-alignment))
+
+(defun valign--remove-from-jit-lock ()
+ "Add valig hook to jit-lock."
+ ;; Our alignment function should run after font-lock, so it’s
+ ;; text properties are not mangled by that of font-lock.
+ (remove-hook 'jit-lock-functions #'valign-initial-alignment t)
+ (remove-function (local 'font-lock-fontify-region)
+ #'valign-initial-alignment))
(defun valign-table-quite ()
"Align table but don’t emit any errors."
@@ -613,17 +623,11 @@ for the former, and 'multi-column for the latter."
((debug error) (message "Valign error when aligning table: %s"
(error-message-string err)))))
-(defun valign--markdown-mode-hook ()
- "Valign hook function used by `markdown-mode'."
- ;; We want our hook run after other markdown fontifications,
- ;; because they mess up our alignment (which is not cool).
- (add-hook 'jit-lock-functions #'valign-always-align 98 t))
-
(defun valign--force-align-buffer (&rest _)
"Forcefully realign every table in the buffer."
(valign-initial-alignment (point-min) (point-max) t))
-(defun valign--realign-on-refontification (&rest _)
+(defun valign--align-buffer-on-fontification (&rest _)
"Make sure text in the buffer are realigned.
When they are fontified next time."
(with-silent-modifications
@@ -641,20 +645,6 @@ When they are fontified next time."
(with-silent-modifications
(put-text-property beg end 'valign-init nil))))
-(defun valign--force-window-update-advice (&optional object)
- "Hook run after ‘force-window-update’ runs.
-OBJECT is the same as in ‘force-window-update’."
- (cond ((null object)
- (dolist (window (window-list))
- (with-selected-window window
- (valign--realign-on-refontification))))
- ((window-live-p object)
- (with-selected-window object
- (valign--realign-on-refontification)))
- ((or (bufferp object) (stringp object))
- (with-current-buffer object
- (valign--realign-on-refontification)))))
-
(defun valign-reset-buffer ()
"Remove alignment in the buffer."
;; TODO Use the new Emacs 27 function.
@@ -682,30 +672,29 @@ OBJECT is the same as in ‘force-window-update’."
:lighter valign-lighter
(if (and valign-mode window-system)
(progn
- (add-hook 'org-mode-hook #'valign--org-mode-hook)
- (add-hook 'markdown-mode-hook #'valign--markdown-mode-hook)
+ ;; Init.
+ (dolist (hook '(org-mode-hook markdown-mode-hook))
+ (add-hook hook #'valign--add-to-jit-lock))
+ ;; Force align.
(add-hook 'org-agenda-finalize-hook #'valign--force-align-buffer)
- (advice-add 'org-table-justify-field-maybe
- :after #'valign-table-quite)
- (advice-add 'org-toggle-inline-images
- :after #'valign--force-align-buffer)
- (advice-add 'org-restart-font-lock
- :before #'valign--realign-on-refontification)
- (advice-add 'visible-mode
- :before #'valign--realign-on-refontification)
- ;; account for hide-link, show-math, and hide markup
- (advice-add 'markdown-reload-extensions
- :before #'valign--realign-on-refontification)
- (advice-add 'markdown-toggle-inline-images
- :after #'valign--force-align-buffer)
- (advice-add 'markdown-table-align :after #'valign-table-quite)
- (advice-add 'org-flag-region
- :before #'valign--org-flag-region-advice)
- (advice-add 'outline-flag-region
- :before #'valign--org-flag-region-advice)
- (advice-add 'text-scale-adjust
- :before #'valign--force-window-update-advice)
- ;; Force jit-lock to refontify (and thus realign) the buffer.
+ ;; Sadly some functions refuse to work with
+ ;; `valign--align-buffer-on-fontification.'
+ (dolist (fn '(text-scale-adjust
+ markdown-toggle-inline-images
+ org-toggle-inline-images))
+ (advice-add fn :after #'valign--force-align-buffer))
+ ;; Align table.
+ (dolist (fn '(org-table-justify-field-maybe markdown-table-align))
+ (advice-add fn :after #'valign-table-quite))
+ ;; Realign with font lock change.
+ (dolist (fn '(org-restart-font-lock
+ visible-mode
+ markdown-reload-extensions))
+ (advice-add fn :before #'valign--align-buffer-on-fontification))
+ ;; Realign with font lock change.
+ (dolist (fn '(org-flag-region outline-flag-region))
+ (advice-add fn :before #'valign--org-flag-region-advice))
+ ;; Sync all buffers.
(dolist (buf (buffer-list))
;; If the buffer is visible, realign immediately, if not,
;; realign when it becomes visible.
@@ -720,32 +709,30 @@ OBJECT is the same as in ‘force-window-update’."
(point-min) (point-max) 'fontified nil)
(put-text-property
(point-min) (point-max) 'valign-init nil))))
- (cond ((derived-mode-p 'org-mode)
- (valign--org-mode-hook))
- ((derived-mode-p 'markdown-mode)
- (valign--markdown-mode-hook))))))
- (remove-hook 'org-mode-hook #'valign--org-mode-hook)
- (remove-hook 'markdown-mode-hook #'valign--markdown-mode-hook)
+ (valign--add-to-jit-lock))))
+ ;; Disable.
+ (dolist (hook '(org-mode-hook markdown-mode-hook))
+ (remove-hook hook #'valign--add-to-jit-lock))
(remove-hook 'org-agenda-finalize-hook #'valign--force-align-buffer)
-
- (advice-remove 'org-toggle-inline-images #'valign--force-align-buffer)
- (advice-remove 'org-restart-font-lock #'valign--realign-on-refontification)
- (advice-remove 'visible-mode #'valign--realign-on-refontification)
- (advice-remove 'org-table-justify-field-maybe #'valign-table-quite)
- (advice-remove 'markdown-table-align #'valign-table-quite)
- (advice-remove 'org-flag-region #'valign--org-flag-region-advice)
- (advice-remove 'outline-flag-region #'valign--org-flag-region-advice)
- (advice-remove 'markdown-reload-extensions
- #'valign--realign-on-refontification)
- (advice-remove 'markdown-toggle-inline-images
- #'valign--force-align-buffer)
- (advice-remove 'text-scale-adjust
- #'valign--force-window-update-advice)
+ (dolist (fn '(text-scale-adjust
+ markdown-toggle-inline-images
+ org-toggle-inline-images))
+ (advice-add fn :after #'valign--force-align-buffer))
+ (dolist (fn '(org-table-justify-field-maybe markdown-table-align))
+ (advice-remove fn #'valign-table-quite))
+ (dolist (fn '(org-restart-font-lock
+ visible-mode
+ markdown-reload-extensions))
+ (advice-remove fn #'valign--align-buffer-on-fontification))
+ (dolist (fn '(org-flag-region outline-flag-region))
+ (advice-remove fn #'valign--org-flag-region-advice))
+ ;; Sync all buffers.
(dolist (buf (buffer-list))
(with-current-buffer buf
(when (or (derived-mode-p 'org-mode)
(derived-mode-p 'markdown-mode))
- (valign-reset-buffer))))))
+ (valign-reset-buffer)
+ (valign--remove-from-jit-lock))))))
(provide 'valign)
- [elpa] externals/valign 97beef8 127/198: Remove valign-table-quiet, (continued)
- [elpa] externals/valign 97beef8 127/198: Remove valign-table-quiet, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 1412fef 133/198: * valign.el (valign-table): Suppress search errors., Stefan Monnier, 2020/12/01
- [elpa] externals/valign fc591d8 129/198: * valign.el (valign-table-1): Clear overlay before measuring table., Stefan Monnier, 2020/12/01
- [elpa] externals/valign c5eb220 108/198: Remove valign--face-attribute, Stefan Monnier, 2020/12/01
- [elpa] externals/valign ed8dd50 118/198: Remove obsolete functions, Stefan Monnier, 2020/12/01
- [elpa] externals/valign ced2f6a 132/198: * valign.el (valign-table-1): Fix search term., Stefan Monnier, 2020/12/01
- [elpa] externals/valign c70c64e 125/198: * valign.el (valign--clean-text-property): Remove code using 'text-property-search-forward'., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 645260f 076/198: * valign.el (valign-table): Allow edebug., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 82566b3 080/198: Fix tab calculation, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 6578fe4 081/198: * valign.el (valign-table): Don’t message errors., Stefan Monnier, 2020/12/01
- [elpa] externals/valign e2a2a85 085/198: Rework hooks,
Stefan Monnier <=
- [elpa] externals/valign 44651e9 086/198: * valign.el (valign-mode): Change text-scale hooks., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 8b6ce8c 084/198: * valign.el (valign--cell-width): Minor change., Stefan Monnier, 2020/12/01
- [elpa] externals/valign dcf6bd8 088/198: Add force align, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 53be5d7 089/198: Add fancy bar, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 98eae8d 090/198: * valign.el (valign-table): Remove setter for custom option., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 159ae0f 102/198: Fix typo, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 1a614d2 101/198: Add missing with-silent-modifications form, Stefan Monnier, 2020/12/01
- [elpa] externals/valign ba7a72b 110/198: * valign.el (valign-table): Tuck in some long lines., Stefan Monnier, 2020/12/01
- [elpa] externals/valign ea71f38 126/198: * valign.el (valign-fancy-bar): Fix typo., Stefan Monnier, 2020/12/01
- [elpa] externals/valign cb95dc1 119/198: Separate valign--do-table, Stefan Monnier, 2020/12/01