From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Beck Subject: Re: [PATCH] org-table-beginning/end-of-field Date: Mon, 08 Sep 2014 14:17:06 +0200 Message-ID: <87egvme27x.fsf_-_@sophokles.streitblatt.de> References: <87mwaaekp8.fsf@sophokles.streitblatt.de> <871trmbe92.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:57336) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XQxsz-0007vr-GD for emacs-orgmode@gnu.org; Mon, 08 Sep 2014 08:17:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XQxst-0002uD-UB for emacs-orgmode@gnu.org; Mon, 08 Sep 2014 08:17:33 -0400 Received: from plane.gmane.org ([80.91.229.3]:53255) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XQxst-0002u2-K6 for emacs-orgmode@gnu.org; Mon, 08 Sep 2014 08:17:27 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1XQxsq-0004WE-Sr for emacs-orgmode@gnu.org; Mon, 08 Sep 2014 14:17:24 +0200 Received: from ip-109-43-136-220.web.vodafone.de ([109.43.136.220]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 08 Sep 2014 14:17:24 +0200 Received: from fb by ip-109-43-136-220.web.vodafone.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 08 Sep 2014 14:17:24 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Nicolas Goaziou writes: > Thanks for the patch. Though, wouldn't it make more sense to properly > handle a missing argument instead? How about this? -- Florian Beck --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-org-table-fix-arguments-of-org-table-beginning-of-fi.patch >From 4fb2bbff2238d15ae7c896e0eb268b74ea4e56dc Mon Sep 17 00:00:00 2001 From: Florian Beck 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 --=-=-=--