emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/focus fe50fbeb2b 1/3: Cache current thing to focus


From: ELPA Syncer
Subject: [nongnu] elpa/focus fe50fbeb2b 1/3: Cache current thing to focus
Date: Tue, 28 May 2024 07:00:30 -0400 (EDT)

branch: elpa/focus
commit fe50fbeb2bf924c26737986cfbdb071302a98461
Author: Florian Rommel <mail@florommel.de>
Commit: Florian Rommel <mail@florommel.de>

    Cache current thing to focus
    
    Avoid calculating the thing to focus on every update.
---
 focus.el | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/focus.el b/focus.el
index d834760356..bf403b46ce 100644
--- a/focus.el
+++ b/focus.el
@@ -52,7 +52,9 @@ many derivatives should be placed by the end of the list.
 
 Things that are defined include `symbol', `list', `sexp',
 `defun', `filename', `url', `email', `word', `sentence',
-`whitespace', `line', and `page'."
+`whitespace', `line', and `page'.
+
+In order for changes to take effect, reenable `focus-mode'."
   :type '(alist :key-type symbol :valye-type symbol)
   :group 'focus)
 
@@ -76,6 +78,9 @@ Things that are defined include `symbol', `list', `sexp',
 (defvar-local focus-current-thing nil
   "Overrides the choice of thing dictated by `focus-mode-to-thing' if set.")
 
+(defvar-local focus-current-thing-cache nil
+  "Caches the current thing to focus.")
+
 (defvar-local focus-buffer nil
   "Local reference to the buffer focus functions operate on.")
 
@@ -94,12 +99,16 @@ The timer calls `focus-read-only-hide-cursor' after
 `focus-read-only-blink-seconds' seconds.")
 
 (defun focus-get-thing ()
-  "Return the current thing, based on `focus-mode-to-thing'."
+  "Return the current thing, based on `focus-mode-to-thing'.
+
+This also sets `focus-current-thing-cache' to the current thing."
   (or focus-current-thing
-      (let* ((modes (mapcar 'car focus-mode-to-thing))
-             (mode  (or (cl-find major-mode modes)
-                        (apply #'derived-mode-p modes))))
-        (if mode (cdr (assoc mode focus-mode-to-thing)) 'sentence))))
+      focus-current-thing-cache
+      (setq focus-current-thing-cache
+            (let* ((modes (mapcar 'car focus-mode-to-thing))
+                   (mode  (or (cl-find major-mode modes)
+                              (apply #'derived-mode-p modes))))
+              (if mode (cdr (assoc mode focus-mode-to-thing)) 'sentence)))))
 
 (defun focus-bounds ()
   "Return the current bounds, based on `focus-get-thing'."
@@ -109,7 +118,7 @@ The timer calls `focus-read-only-hide-cursor' after
                   (beg (org-element-property :begin elem))
                   (end (org-element-property :end elem)))
              (cons beg end)))
-          (t (bounds-of-thing-at-point (focus-get-thing))))))
+          (t (bounds-of-thing-at-point thing)))))
 
 (defun focus-move-focus ()
   "Move the focused section according to `focus-bounds'.
@@ -143,6 +152,7 @@ It sets the `focus-pre-overlay', `focus-min-overlay', and
     (mapc (lambda (o) (overlay-put o 'face 'focus-unfocused))
           (list focus-pre-overlay focus-post-overlay))
     (add-hook 'post-command-hook 'focus-move-focus nil t)
+    (setq focus-current-thing-cache nil)
     (add-hook 'change-major-mode-hook 'focus-terminate nil t)))
 
 (defun focus-terminate ()
@@ -155,7 +165,8 @@ The overlays pointed to by `focus-pre-overlay',
     (mapc 'delete-overlay
           (list focus-pre-overlay focus-mid-overlay focus-post-overlay))
     (remove-hook 'post-command-hook 'focus-move-focus t)
-    (setq focus-pre-overlay nil
+    (setq focus-current-thing-cache nil
+          focus-pre-overlay nil
           focus-mid-overlay nil
           focus-post-overlay nil)))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]