[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully
From: |
Eli Zaretskii |
Subject: |
bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully |
Date: |
Wed, 19 Jul 2023 22:06:48 +0300 |
> From: Philip Kaludercic <philipk@posteo.net>
> Date: Wed, 19 Jul 2023 18:51:05 +0000
>
> Evaluating (thing-at-point 'string) at the end of a buffer raises an
> error:
>
> --8<---------------cut here---------------start------------->8---
> Debugger entered--Lisp error: (wrong-type-argument characterp nil)
> char-syntax(nil)
> (eq (char-syntax (char-after)) 34)
> (if (eq (char-syntax (char-after)) 34) (let ((bound
> (bounds-of-thing-at-point 'sexp))) (and bound (<= (car bound) (point)) (<
> (point) (cdr bound)) bound)))
> (if (nth 3 ppss) (condition-case nil (progn (goto-char (nth 8 ppss)) (cons
> (point) (progn (forward-sexp) (point)))) (error nil)) (if (eq (char-syntax
> (char-after)) 34) (let ((bound (bounds-of-thing-at-point 'sexp))) (and bound
> (<= (car bound) (point)) (< (point) (cdr bound)) bound))))
> (let ((ppss (syntax-ppss))) (if (nth 3 ppss) (condition-case nil (progn
> (goto-char (nth 8 ppss)) (cons (point) (progn (forward-sexp) (point))))
> (error nil)) (if (eq (char-syntax (char-after)) 34) (let ((bound
> (bounds-of-thing-at-point 'sexp))) (and bound (<= (car bound) (point)) (<
> (point) (cdr bound)) bound)))))
> (save-excursion (let ((ppss (syntax-ppss))) (if (nth 3 ppss)
> (condition-case nil (progn (goto-char (nth 8 ppss)) (cons (point) (progn
> (forward-sexp) (point)))) (error nil)) (if (eq (char-syntax (char-after)) 34)
> (let ((bound (bounds-of-thing-at-point ...))) (and bound (<= (car bound)
> (point)) (< (point) (cdr bound)) bound))))))
> thing-at-point-bounds-of-string-at-point()
> funcall(thing-at-point-bounds-of-string-at-point)
> (cond ((get thing 'bounds-of-thing-at-point) (funcall (get thing
> 'bounds-of-thing-at-point))) ((and (not (eq thing 'whitespace))
> (save-excursion (goto-char (point-min)) (not (re-search-forward "[^\11\n ]"
> nil t)))) nil) (t (let ((orig (point))) (condition-case nil (progn
> (save-excursion (funcall (or ... ...)) (funcall (or ... ...)) (let (...) (if
> ... ... ... ... ... ...)))) (error nil)))))
> bounds-of-thing-at-point(string)
> (let ((bounds (bounds-of-thing-at-point thing))) (if bounds (progn
> (buffer-substring (car bounds) (cdr bounds)))))
> (cond ((let* ((--cl-var-- thing-at-point-provider-alist) #'nil (pthing nil)
> (result nil) (--cl-var-- t) (--cl-var-- t) --cl-var--) (while (and (consp
> --cl-var--) (progn (progn (setq function ...) (setq pthing ...)) (if (eq
> pthing thing) (progn ...)) (if result (progn ... ...) t))) (setq --cl-var--
> (cdr --cl-var--)) (setq --cl-var-- nil)) --cl-var--)) ((get thing
> 'thing-at-point) (funcall (get thing 'thing-at-point))) (t (let ((bounds
> (bounds-of-thing-at-point thing))) (if bounds (progn (buffer-substring (car
> bounds) (cdr bounds)))))))
> (let ((text (cond ((let* ((--cl-var-- thing-at-point-provider-alist) #'nil
> (pthing nil) (result nil) (--cl-var-- t) (--cl-var-- t) --cl-var--) (while
> (and ... ...) (setq --cl-var-- ...) (setq --cl-var-- nil)) --cl-var--)) ((get
> thing 'thing-at-point) (funcall (get thing 'thing-at-point))) (t (let
> ((bounds ...)) (if bounds (progn ...))))))) (if (and text no-properties
> (sequencep text)) (progn (set-text-properties 0 (length text) nil text)))
> text)
> thing-at-point(string)
> eval-expression((thing-at-point 'string) nil nil 127)
> funcall-interactively(eval-expression (thing-at-point 'string) nil nil 127)
> command-execute(eval-expression)
> --8<---------------cut here---------------end--------------->8---
>
> In this case it is easy to avoid it, with the below patch, by ensuring
> that `char-syntax' is not passed a nil.
Thanks, but could you rewrite so as not to call char-after more than
once?
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Philip Kaludercic, 2023/07/19
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully,
Eli Zaretskii <=
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Philip Kaludercic, 2023/07/19
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Eli Zaretskii, 2023/07/20
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Philip Kaludercic, 2023/07/20
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Eli Zaretskii, 2023/07/20
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Philip Kaludercic, 2023/07/20
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Eli Zaretskii, 2023/07/20
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Philip Kaludercic, 2023/07/21
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Eli Zaretskii, 2023/07/21
- bug#64733: [PATCH] ; Handle string-at-point at end of buffer gracefully, Philip Kaludercic, 2023/07/22