changeset 6174:3902f1241d1c

(current-word): Check properly for bolp. New optional arg STRICT. Doc fix.
author Richard M. Stallman <rms@gnu.org>
date Thu, 03 Mar 1994 18:27:51 +0000
parents cbf3383981cb
children 340f5eb2e8b6
files lisp/simple.el
diffstat 1 files changed, 26 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/simple.el	Thu Mar 03 18:11:32 1994 +0000
+++ b/lisp/simple.el	Thu Mar 03 18:27:51 1994 +0000
@@ -1952,32 +1952,38 @@
   (interactive "p")
   (kill-word (- arg)))
 
-(defun current-word ()
-  "Return the word point is on as a string, if it's between two
-word-constituent characters. If not, but it immediately follows one,
-move back first.  Otherwise, if point precedes a word constituent,
-move forward first.  Otherwise, move backwards until a word constituent
-is found and get that word; if you reach a newline first, move forward
-instead."
+(defun current-word (&optional strict)
+  "Return the word point is on (or a nearby word) as a string.
+If optional arg STRICT is non-nil, return nil unless point is within
+or adjacent to a word."
   (save-excursion
     (let ((oldpoint (point)) (start (point)) (end (point)))
       (skip-syntax-backward "w_") (setq start (point))
       (goto-char oldpoint)
       (skip-syntax-forward "w_") (setq end (point))
       (if (and (eq start oldpoint) (eq end oldpoint))
-	  (progn
-	    (skip-syntax-backward "^w_"
-				  (save-excursion (beginning-of-line) (point)))
-	    (if (eq (preceding-char) ?\n)
-		(progn
-		  (skip-syntax-forward "^w_")
-		  (setq start (point))
-		  (skip-syntax-forward "w_")
-		  (setq end (point)))
-	      (setq end (point))
-	      (skip-syntax-backward "w_")
-	      (setq start (point)))))
-      (buffer-substring start end))))
+	  ;; Point is neither within nor adjacent to a word.
+	  (and (not strict)
+	       (progn
+		 ;; Look for preceding word in same line.
+		 (skip-syntax-backward "^w_"
+				       (save-excursion (beginning-of-line)
+						       (point)))
+		 (if (bolp)
+		     ;; No preceding word in same line.
+		     ;; Look for following word in same line.
+		     (progn
+		       (skip-syntax-forward "^w_"
+					    (save-excursion (end-of-line)
+							    (point)))
+		       (setq start (point))
+		       (skip-syntax-forward "w_")
+		       (setq end (point)))
+		   (setq end (point))
+		   (skip-syntax-backward "w_")
+		   (setq start (point)))
+		 (buffer-substring start end)))
+	(buffer-substring start end)))))
 
 (defconst fill-prefix nil
   "*String for filling to insert at front of new line, or nil for none.