emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] [PATCH] org-table-beginning/end-of-field


From: Florian Beck
Subject: Re: [O] [PATCH] org-table-beginning/end-of-field
Date: Mon, 08 Sep 2014 14:17:06 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.93 (gnu/linux)

Nicolas Goaziou <address@hidden> writes:

> Thanks for the patch. Though, wouldn't it make more sense to properly
> handle a missing argument instead?

How about this?

-- 
Florian Beck
>From 4fb2bbff2238d15ae7c896e0eb268b74ea4e56dc Mon Sep 17 00:00:00 2001
From: Florian Beck <address@hidden>
Date: Mon, 8 Sep 2014 14:08:56 +0200
Subject: [PATCH] org-table: fix arguments of `org-table-beginning-of-field'
 and `org-table-end-of-field'. Also fix docstring and cleanup code.

* lisp/org-table.el (org-table--border-of-field): new function
(org-table-beginning-of-field): call it
(org-table-end-of-field): call it
---
 lisp/org-table.el | 45 +++++++++++++++++++++------------------------
 1 file changed, 21 insertions(+), 24 deletions(-)

diff --git a/lisp/org-table.el b/lisp/org-table.el
index 547f933..31fda57 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -1061,37 +1061,34 @@ Before doing so, re-align the table if necessary."
   (if (looking-at "| ?")
       (goto-char (match-end 0))))
 
-(defun org-table-beginning-of-field (&optional n)
-  "Move to the end of the current table field.
-If already at or after the end, move to the end of the next table field.
-With numeric argument N, move N-1 fields forward first."
-  (interactive "p")
+(defun org-table--border-of-field (n move-fn element cmp-fn)
   (let ((pos (point)))
     (while (> n 1)
       (setq n (1- n))
-      (org-table-previous-field))
-    (if (not (re-search-backward "|" (point-at-bol 0) t))
-       (user-error "No more table fields before the current")
-      (goto-char (match-end 0))
-      (and (looking-at " ") (forward-char 1)))
-    (if (>= (point) pos) (org-table-beginning-of-field 2))))
+      (funcall move-fn))
+    (goto-char (org-element-property element (org-element-context)))
+    (if (and (> n 0) (funcall cmp-fn (point) pos))
+       (org-table--border-of-field 2 move-fn element cmp-fn))))
 
-(defun org-table-end-of-field (&optional n)
+(defun org-table-beginning-of-field (&optional n)
   "Move to the beginning of the current table field.
-If already at or before the beginning, move to the beginning of the
-previous field.
+If already at or before the beginning and N is not 0, move to the 
+beginning of the previous table field.
 With numeric argument N, move N-1 fields backward first."
   (interactive "p")
-  (let ((pos (point)))
-    (while (> n 1)
-      (setq n (1- n))
-      (org-table-next-field))
-    (when (re-search-forward "|" (point-at-eol 1) t)
-      (backward-char 1)
-      (skip-chars-backward " ")
-      (if (and (equal (char-before (point)) ?|) (looking-at " "))
-         (forward-char 1)))
-    (if (<= (point) pos) (org-table-end-of-field 2))))
+  (org-table--border-of-field (or n 1)
+                             'org-table-previous-field
+                             :contents-begin '>=))
+
+(defun org-table-end-of-field (&optional n)
+  "Move to the end of the current table field.
+If already at or after the end and N is not 0, move to the end of the
+next field.
+With numeric argument N, move N-1 fields forward first."
+  (interactive "p")
+  (org-table--border-of-field (or n 1)
+                             'org-table-next-field
+                             :contents-end '<=))
 
 ;;;###autoload
 (defun org-table-next-row ()
-- 
1.9.1


reply via email to

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