all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Dima Kogan <dima@secretsauce.net>
To: 15580@debbugs.gnu.org
Subject: bug#15580: [PATCH] 24.3.50; subword-capitalize at the end of a buffer jumps to the beginning
Date: Thu, 10 Oct 2013 00:01:22 -0700	[thread overview]
Message-ID: <87y561obi5.fsf@secretsauce.net> (raw)

[-- Attachment #1: Type: text/plain, Size: 473 bytes --]

Hi.

I'm observing subword-capitalize get confused when called near the end
of a buffer. Instead of doing nothing like capitalize-word does,
subword-capitalize jumps to around the beginning of the buffer and
capitalizes something there.

The cause is simple. subword-capitalize does

(re-search-forward "[[:alpha:]]" ....)

and uses the results of this search even if it failed. The attached
patch explicitly checks for search failure and exits the function in
that case.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-subword-capitalize-now-fails-gracefully-at-end-of-bu.patch --]
[-- Type: text/x-diff, Size: 1691 bytes --]

From 3329a22e633ce345d727ebceb81d3183bd74372f Mon Sep 17 00:00:00 2001
From: Dima Kogan <dima@secretsauce.net>
Date: Wed, 9 Oct 2013 23:57:25 -0700
Subject: [PATCH] subword-capitalize now fails gracefully at end-of-buffer

---
 lisp/progmodes/subword.el | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/lisp/progmodes/subword.el b/lisp/progmodes/subword.el
index 8cf4feb..1866ad9 100644
--- a/lisp/progmodes/subword.el
+++ b/lisp/progmodes/subword.el
@@ -260,21 +260,25 @@ Optional argument ARG is the same as for `capitalize-word'."
   (let ((count (abs arg))
 	(start (point))
 	(advance (if (< arg 0) nil t)))
-    (dotimes (i count)
-      (if advance
-	  (progn (re-search-forward
-		  (concat "[[:alpha:]]")
-		  nil t)
-		 (goto-char (match-beginning 0)))
-	(subword-backward))
-      (let* ((p (point))
-	     (pp (1+ p))
-	     (np (subword-forward)))
-	(upcase-region p pp)
-	(downcase-region pp np)
-	(goto-char (if advance np p))))
-    (unless advance
-      (goto-char start))))
+
+    (catch 'search-failed
+      (dotimes (i count)
+        (if advance
+            (progn
+              (when (not (re-search-forward
+                          (concat "[[:alpha:]]")
+                          nil t))
+                (throw 'search-failed "search failed"))
+              (goto-char (match-beginning 0)))
+          (subword-backward))
+        (let* ((p (point))
+               (pp (1+ p))
+               (np (subword-forward)))
+          (upcase-region p pp)
+          (downcase-region pp np)
+          (goto-char (if advance np p))))
+      (unless advance
+        (goto-char start)))))
 
 \f
 
-- 
1.8.3.2


             reply	other threads:[~2013-10-10  7:01 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-10  7:01 Dima Kogan [this message]
2013-10-14 19:25 ` bug#15580: [PATCH] 24.3.50; subword-capitalize at the end of a buffer jumps to the beginning Stefan Monnier
2013-10-15 19:03   ` Dima Kogan
2013-10-16  3:03     ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y561obi5.fsf@secretsauce.net \
    --to=dima@secretsauce.net \
    --cc=15580@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.