On 10.9.2013, at 21:48, Nicolas Goaziou <n.goaz...@gmail.com> wrote:
> Hello, > > Suvayu Ali <fatkasuvayu+li...@gmail.com> writes: > >> 1. When traversing the file header, goes one line at a time. I would >> expect to go to the next blank line. In the attached Org file, from >> somewhere on #+TITLE to the blank line before the first headline. > > There no such thing as a "file header". I think that navigating through > (regular) keywords is better, so that's a feature. > >> 2. Skips whole source block even if there are blank lines. So can't >> navigate large source blocks for small edits. Try on the python >> source block under the first headline. > > I concentrate on Org syntax for now. >> >> 3. Goes through each row of a table instead of going over the table in >> one go. Start with cursor on "From ConDBBrowser:". > > OK. Rows should be skipped now. >> >> 4. Skips the whole body under a headline when followed by link. Try >> putting point on the headline "Important points" and move; you will >> jump to "Tagging Issues" instead of the link and the list after. > > That was a bug. Should be fixed. Hi Nicolas, this looks very good already, thank you! And I agree with you, beginning of line is a good target column. Cheers - Carsten > >> How can I test going backward? > > It is not written yet. > > New version: > > (defun org-forward-linear-element () > (interactive) > (when (eobp) (user-error "Cannot move further down")) > (let* ((origin (point)) > (element (org-element-at-point)) > (type (org-element-type element)) > (post-affiliated (org-element-property :post-affiliated element)) > (contents-begin (org-element-property :contents-begin element)) > (contents-end (org-element-property :contents-end element)) > (end (let ((end (org-element-property :end element)) (parent element)) > (while (and (setq parent (org-element-property :parent parent)) > (= (org-element-property :contents-end parent) > end)) > (setq end (org-element-property :end parent))) > end))) > (skip-chars-forward " \r\t\n") > (or (eobp) (goto-char (max (line-beginning-position) origin))) > (cond ((or (eobp) (= (point) end))) > ;; At a table row, move to the end of the table. > ((eq type 'table-row) > (goto-char (org-element-property > :end (org-element-property :parent element)))) > ((and post-affiliated (< (point) post-affiliated)) > (goto-char post-affiliated)) > ((eq type 'table) (goto-char end)) > ((not contents-begin) (goto-char end)) > ((< (point) contents-begin) > (if (not (memq type '(footnote-definition item))) > (goto-char contents-begin) > (end-of-line) > (org-forward-linear-element))) > ((>= (point) contents-end) (goto-char end)) > ((eq type 'paragraph) (goto-char end)) > ((eq type 'plain-list) > (end-of-line) > (org-forward-linear-element)) > ((eq type 'verse-block) > (or (re-search-forward "^[ \t]*$" contents-end t) > (goto-char end))) > (t (error "This shouldn't happen"))) > (when (memq (org-invisible-p2) '(org-hide-block outline)) > (goto-char end)))) > > > Regards, > > -- > Nicolas Goaziou