From 0aea302ff0769494620cb958cf3bcc954e1233ee Mon Sep 17 00:00:00 2001 From: Ionut Adrian Ciolan Date: Sun, 29 Jun 2025 23:38:10 +0300 Subject: [PATCH] fix errors when trying to add linenumbers outside of a src-block --- scimax-ob-line-numbers.el | 44 +++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/scimax-ob-line-numbers.el b/scimax-ob-line-numbers.el index de69697..b016c46 100644 --- a/scimax-ob-line-numbers.el +++ b/scimax-ob-line-numbers.el @@ -41,24 +41,36 @@ (remove-hook 'post-command-hook #'scimax-ob-add-line-numbers t)) (defun scimax-ob-add-line-numbers () - "Add line numbers to the current Org source block." + "Add line numbers to an org src-block." (interactive) (save-excursion - (let* ((src-block (org-element-context)) - (nlines (- (length (s-split "\n" (org-element-property :value src-block))) 1))) - (scimax-ob-remove-line-numbers) - (goto-char (org-element-property :begin src-block)) - (while (not (looking-at "#\\+BEGIN")) - (forward-line)) - (forward-line) - (cl-loop for i from 1 to nlines do - (beginning-of-line) - (let ((ov (make-overlay (point) (point)))) - (overlay-put ov 'before-string - (propertize (format "%03s " i) - 'font-lock-face '(:foreground "fg-main" :background "bg-main"))) - (push ov scimax-ob-number-line-overlays)) - (forward-line)))) + (let* ((src-block (org-element-context))) + (when (eq (org-element-type src-block) 'src-block) + ;;iAdrian patch - fix 'wrong-type-argument stringp nil' coming from the 'org-element-property :value src-block => nil' when trying to add linenumbers outside of a src-block (see commented code below which is the original version) + (let* ((value (org-element-property :value src-block)) + (nlines (if value (1- (length (s-split "\n" value))) 0))) +;; (let* ((src-block (org-element-context)) +;; (nlines (- (length (s-split "\n" (org-element-property :value src-block))) 1))) + ;; clear any existing overlays + (scimax-ob-remove-line-numbers) + + (goto-char (org-element-property :begin src-block)) + ;; the beginning may be header, so we move forward to get the #+BEGIN + ;; line. Then jump one more to get in the code block + (while (not (looking-at "#\\+BEGIN")) + (forward-line)) + (forward-line) + (cl-loop for i from 1 to nlines + do + (beginning-of-line) + (let ((ov (make-overlay (point) (point)))) + (overlay-put + ov + 'before-string (propertize + (format "%03s " (number-to-string i)) + 'font-lock-face '(:foreground "fg-main" :background "bg-main"))) + (push ov scimax-ob-number-line-overlays)) + (forward-line)))))) (add-hook 'post-command-hook #'scimax-ob-add-line-numbers nil 'local)) (provide 'scimax-ob-line-numbers)