[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/beardbolt bb64352f8d 034/323: Store and use ranges to v
From: |
ELPA Syncer |
Subject: |
[elpa] externals/beardbolt bb64352f8d 034/323: Store and use ranges to view highlighted regions |
Date: |
Thu, 9 Mar 2023 10:57:58 -0500 (EST) |
branch: externals/beardbolt
commit bb64352f8d0ebd08e2ff25d6b69395bbe7436300
Author: Jay Kamat <jaygkamat@gmail.com>
Commit: Jay Kamat <jaygkamat@gmail.com>
Store and use ranges to view highlighted regions
---
rmsbolt.el | 161 +++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 99 insertions(+), 62 deletions(-)
diff --git a/rmsbolt.el b/rmsbolt.el
index ca7ba5173a..827b7403cc 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -28,6 +28,7 @@
(require 'cl-lib)
(require 'subr-x)
(require 'map)
+(require 'cc-defs)
;;; Code:
;;;; Customize:
@@ -43,6 +44,10 @@
"Whether we should goto the match in the other buffer if it is non visible."
:type 'boolean
:group 'rmsbolt)
+(defcustom rmsbolt-mode-lighter " RMS🗲"
+ "Lighter displayed in mode line when `rmsbolt-mode' is active."
+ :type 'string
+ :group 'rmsbolt)
;;;;; Buffer Local Tweakables
(defcustom rmsbolt-dissasemble nil
@@ -530,17 +535,32 @@ Needed as ocaml cannot output asm to a non-hardcoded file"
(insert-file-contents (rmsbolt-output-filename
src-buffer t))
(split-string (buffer-string) "\n" t))))
(ht (make-hash-table))
- (linum 0))
+ (linum 1)
+ (start-match nil)
+ (in-match nil))
;; Add lines to hashtable
(dolist (line lines)
- (when-let ((property
- (get-text-property
- 0 'rmsbolt-src-line line)))
- (cl-pushnew
- ;; These numbers are 0 indexed, but we want 1 indexed
- (1+ linum)
- (gethash property ht)))
- (incf linum))
+ (let ((property
+ (get-text-property
+ 0 'rmsbolt-src-line line)))
+ (progn
+ (cl-tagbody
+ run-conditional
+ (cond
+ ((and in-match (eq in-match property))
+ ;; We are continuing an existing match
+ nil)
+ (in-match
+ ;; We are in a match that has just expired
+ (push (cons start-match (1- linum))
+ (gethash in-match ht))
+ (setq in-match nil
+ start-match nil)
+ (go run-conditional))
+ (property
+ (setq in-match property
+ start-match linum))))))
+ (cl-incf linum))
(with-current-buffer src-buffer
(setq-local rmsbolt-line-mapping ht))
@@ -668,65 +688,82 @@ Needed as ocaml cannot output asm to a non-hardcoded file"
(defun rmsbolt-move-overlays ()
"Function for moving overlays for rmsbolt."
- (if-let* ((should-run
- (and rmsbolt-mode rmsbolt-use-overlays))
- (src-buffer
- (buffer-local-value 'rmsbolt-src-buffer (current-buffer)))
- (output-buffer (get-buffer-create rmsbolt-output-buffer))
- (current-line (line-number-at-pos))
- (src-current-line
- (if (eq (current-buffer) src-buffer)
- current-line
- (get-text-property (point) 'rmsbolt-src-line)))
- (hash-table (buffer-local-value 'rmsbolt-line-mapping src-buffer))
- (asm-lines (gethash src-current-line hash-table))
- ;; TODO also consider asm
- (src-pts
- (with-current-buffer src-buffer
- (save-excursion
- (rmsbolt--goto-line src-current-line)
- (values (c-point 'bol) (c-point 'eol))))))
- (let ((line-visible (not rmsbolt-goto-match))
- (src-buffer-selected (eq (current-buffer) src-buffer)))
- (mapc #'delete-overlay rmsbolt-overlays)
- (setq rmsbolt-overlays nil)
- (push (rmsbolt--setup-overlay (first src-pts) (second src-pts)
src-buffer)
- rmsbolt-overlays)
- (unless src-buffer-selected
- (with-current-buffer src-buffer
- (setq line-visible (rmsbolt--point-visible (first src-pts)))))
- (with-current-buffer output-buffer
- (save-excursion
- (dolist (l asm-lines)
- (rmsbolt--goto-line l)
- ;; check if line is visible and set line-visible
- (unless (or line-visible (not src-buffer-selected))
- (setq line-visible (rmsbolt--point-visible (c-point 'bol))))
-
- (push (rmsbolt--setup-overlay (c-point 'bol) (c-point 'eol)
output-buffer)
- rmsbolt-overlays)))
- (unless line-visible
- ;; Scroll buffer to first line
- (when-let
- ((scroll-buffer (if src-buffer-selected
- output-buffer
- src-buffer))
- (line-scroll (if src-buffer-selected
- (first asm-lines)
- src-current-line))
- (window (get-buffer-window scroll-buffer)))
- (with-selected-window window
- (rmsbolt--goto-line line-scroll))))))
- (mapc #'delete-overlay rmsbolt-overlays)
- (setq rmsbolt-overlays nil)))
+ (when rmsbolt-mode
+ (if-let* ((should-run rmsbolt-use-overlays)
+ (src-buffer
+ (buffer-local-value 'rmsbolt-src-buffer (current-buffer)))
+ (output-buffer (get-buffer-create rmsbolt-output-buffer))
+ (current-line (line-number-at-pos))
+ (src-current-line
+ (if (eq (current-buffer) src-buffer)
+ current-line
+ (get-text-property (point) 'rmsbolt-src-line)))
+ (hash-table (buffer-local-value 'rmsbolt-line-mapping
src-buffer))
+ (asm-lines (gethash src-current-line hash-table))
+ ;; TODO also consider asm
+ (src-pts
+ (with-current-buffer src-buffer
+ (save-excursion
+ (rmsbolt--goto-line src-current-line)
+ (cl-values (c-point 'bol) (c-point 'eol))))))
+ (let ((line-visible (not rmsbolt-goto-match))
+ (src-buffer-selected (eq (current-buffer) src-buffer)))
+ (mapc #'delete-overlay rmsbolt-overlays)
+ (setq rmsbolt-overlays nil)
+ (push (rmsbolt--setup-overlay (cl-first src-pts) (cl-second src-pts)
src-buffer)
+ rmsbolt-overlays)
+ (unless src-buffer-selected
+ (with-current-buffer src-buffer
+ (setq line-visible (rmsbolt--point-visible (cl-first src-pts)))))
+ (with-current-buffer output-buffer
+ (let ((saved-pt (point)))
+ (save-excursion
+ (dolist (l asm-lines)
+ (let* ((start (car l))
+ (end (cdr l))
+ (start-pt (progn (rmsbolt--goto-line start)
+ (c-point 'bol)))
+ (end-pt (progn (rmsbolt--goto-line end)
+ (c-point 'eol)))
+ (visible (or line-visible
+ (rmsbolt--point-visible start-pt)
+ (rmsbolt--point-visible end-pt)
+ (and (> saved-pt start-pt)
+ (< saved-pt end-pt)))))
+ ;; check if line is visible and set line-visible
+ (unless (or visible (not src-buffer-selected))
+ (setq line-visible visible))
+ (push (rmsbolt--setup-overlay start-pt end-pt
output-buffer)
+ rmsbolt-overlays)))))
+ (unless line-visible
+ ;; Scroll buffer to first line
+ (when-let
+ ((scroll-buffer (if src-buffer-selected
+ output-buffer
+ src-buffer))
+ (line-scroll (if src-buffer-selected
+ (car-safe
+ (cl-first asm-lines))
+ src-current-line))
+ (window (get-buffer-window scroll-buffer)))
+ (with-selected-window window
+ (rmsbolt--goto-line line-scroll))))))
+ (mapc #'delete-overlay rmsbolt-overlays)
+ (setq rmsbolt-overlays nil))
+
+ ;; If not in rmsbolt-mode, don't do anything
+ ))
;;;; Mode Definition:
;;;###autoload
;; TODO handle more modes than c-mode
(define-minor-mode rmsbolt-mode
- "RMSbolt"
- nil "RMSBolt" rmsbolt-mode-map
+ "Toggle rmsbolt-mode.
+
+This mode is enabled both in modes to be compiled and output buffers."
+ :global nil
+ :lighter rmsbolt-mode-lighter rmsbolt-mode-map
;; This idle timer always runs, even when we aren't in rmsbolt-mode
(unless rmsbolt--idle-timer
(setq rmsbolt--idle-timer (run-with-idle-timer
- [elpa] externals/beardbolt e0d917206e 038/323: Improve quality of default matching faces, (continued)
- [elpa] externals/beardbolt e0d917206e 038/323: Improve quality of default matching faces, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt a950515dfc 043/323: Fix spelling mistake, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 4213316f23 037/323: Fix recentering when not needed, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 545a366472 049/323: Add more tests, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 2e6163c95a 047/323: Add testing framework, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 5efa347027 046/323: Update readme, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 082cbc7b1c 048/323: Add new tests, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt ff6f376d87 053/323: Update README.org, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 3ca3f35cdb 050/323: Add very basic support for rust, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 65a1ac7b6e 054/323: Add support for demangling, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt bb64352f8d 034/323: Store and use ranges to view highlighted regions,
ELPA Syncer <=
- [elpa] externals/beardbolt 1419a90465 040/323: Add C/C++ demo, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 39f1e05667 009/323: Add filter for commentOnly, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 4a35528d7d 021/323: Configure all variables with buffer-local values, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 3bfc7ed2e3 012/323: Allow custom functions to parse arguments, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 98cea6e8e0 023/323: Simplify creation of new starters with a macro, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 547a47e58f 022/323: Fix default commands, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 2530003c71 020/323: Remove rmsbolt-options, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt cf7d2787bc 027/323: Implement line number parsing, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 8fc36eacd8 044/323: Add option to force assembling, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt d37f8a0ebf 042/323: Remove reliance on hl-line-mode, ELPA Syncer, 2023/03/09