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

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

[elpa] externals/valign 91eb1f5 1/2: Fix an error that occurs when point


From: Stefan Monnier
Subject: [elpa] externals/valign 91eb1f5 1/2: Fix an error that occurs when point is at point-max
Date: Wed, 12 May 2021 18:47:06 -0400 (EDT)

branch: externals/valign
commit 91eb1f54b4cba8555e15c6a7063060c448ebb9d4
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    Fix an error that occurs when point is at point-max
    
    If you press TAB at the end of a file, char-after returns nil and
    char-to-string errors.
    
    * valign.el (valign--char-after-as-string): New subroutine.
    (valign--separator-line-p, valign--at-table-p, valign--table-2,
    valign--guess-charset): Use the new subroutine.
---
 valign.el | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/valign.el b/valign.el
index 3fcc44a..d8b72a7 100644
--- a/valign.el
+++ b/valign.el
@@ -391,6 +391,14 @@ Return t if the dimension is correct, nil if not."
              return nil
              finally return t)))
 
+(defsubst valign--char-after-as-string (&optional pos)
+  "Return (char-after POS) as a string."
+  ;; (char-to-string (char-after)) doesn’t work because
+  ;; ‘char-to-string’ doesn’t accept nil.b
+  (if-let ((ch (char-after pos)))
+      (char-to-string ch)
+    nil))
+
 (defun valign--separator-line-p (&optional charset)
   "Return t if this line is a separator line.
 If the table is a table.el table, you need to specify CHARSET.
@@ -401,7 +409,7 @@ Assumes the point is at the beginning of the line."
     (if charset
         ;; Check for table.el tables.
         (let ((charset (or charset (cdar valign-box-charset-alist))))
-          (member (char-to-string (char-after))
+          (member (valign--char-after-as-string)
                   (list (valign-box-char 1 charset)
                         (valign-box-char 4 charset)
                         (valign-box-char 7 charset))))
@@ -488,9 +496,8 @@ TYPE must be 'org.  Start at point, stop at LIMIT."
     (beginning-of-line)
     (skip-chars-forward " \t")
     ;; CHAR is the first character, CHAR 2 is the one after it.
-    (let ((char (char-to-string (char-after)))
-          (char2 (when-let ((char (char-after (1+ (point)))))
-                   (char-to-string char))))
+    (let ((char (valign--char-after-as-string))
+          (char2 (valign--char-after-as-string (1+ (point)))))
       (or (equal char "|")
           (cl-loop
            for elt in valign-box-charset-alist
@@ -910,7 +917,7 @@ Assumes point is at (2).
     (while (< (point) table-end)
       (save-excursion
         (skip-chars-forward " \t")
-        (if (not (equal (char-to-string (char-after))
+        (if (not (equal (valign--char-after-as-string)
                         (valign-box-char 'v charset)))
             ;; Render separator line.
             (valign--align-separator-row-full
@@ -1003,7 +1010,7 @@ Assumes point before the first character."
 Assumes point at the beginning of the table."
   (cl-loop for charset
            in (mapcar #'cdr valign-box-charset-alist)
-           if (equal (char-to-string (char-after))
+           if (equal (valign--char-after-as-string)
                      (valign-box-char 1 charset))
            return charset
            finally return nil))



reply via email to

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