From 7846e7c17ae31fdf71bea093e7410b90e284c04d Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Sat, 13 Sep 2014 18:20:03 -0700 Subject: All navigation functions moved to ledger-navigate. Reduce several overlapping functions. --- lisp/ledger-navigate.el | 92 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 lisp/ledger-navigate.el (limited to 'lisp/ledger-navigate.el') diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el new file mode 100644 index 00000000..949654e4 --- /dev/null +++ b/lisp/ledger-navigate.el @@ -0,0 +1,92 @@ +;;; ledger-navigate.el --- Provide navigation services through the ledger buffer. + +;; Copyright (C) 2014-2015 Craig Earls (enderw88 AT gmail DOT com) + +;; This file is not part of GNU Emacs. + +;; This is free software; you can redistribute it and/or modify it under +;; the terms of the GNU General Public License as published by the Free +;; Software Foundation; either version 2, or (at your option) any later +;; version. +;; +;; This is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +;; for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +;; MA 02110-1301 USA. + + +;;; Commentary: +;; + + +(provide 'ledger-navigate) + +;; (defun ledger-navigate-next-xact-or-directive () +;; "Move point to beginning of next xact." +;; ;; make sure we actually move to the next xact, even if we are the +;; ;; beginning of one now. +;; (if (looking-at ledger-payee-any-status-regex) +;; (forward-line)) +;; (if (re-search-forward ledger-payee-any-status-regex nil t) +;; (goto-char (match-beginning 0)) +;; (goto-char (point-max)))) + +(defun ledger-navigate-start-xact-or-directive-p () + "return t if at the beginning of an empty line or line +beginning with whitespace" + (not (looking-at "[ \t]\\|\\(^$\\)"))) + +(defun ledger-navigate-next-xact-or-directive () + "move to the beginning of the next xact or directive" + (interactive) + (beginning-of-line) + (if (ledger-navigate-start-xact-or-directive-p) ; if we are the start of an xact, move forward to the next xact + (progn + (forward-line) + (if (not (ledger-navigate-start-xact-or-directive-p)) ; we have moved forward and are not at another xact, recurse forward + (ledger-navigate-next-xact-or-directive))) + (while (not (or (eobp) ; we didn't start off at the beginning of an xact + (ledger-navigate-start-xact-or-directive-p))) + (forward-line)))) + +(defun ledger-navigate-prev-xact () + "Move point to beginning of previous xact." + (ledger-navigate-beginning-of-xact) + (re-search-backward ledger-xact-start-regex nil t)) + +(defun ledger-navigate-beginning-of-xact () + "Move point to the beginning of the current xact" + (interactive) + (unless (looking-at ledger-xact-start-regex) + (re-search-backward ledger-xact-start-regex nil t) + (beginning-of-line)) + (point)) + +(defun ledger-navigate-end-of-xact () + "Move point to end of xact." + (interactive) + (ledger-navigate-next-xact-or-directive) + (backward-char) + (end-of-line) + (point)) + +(defun ledger-navigate-to-line (line-number) + "Rapidly move point to line LINE-NUMBER." + (goto-char (point-min)) + (forward-line (1- line-number))) + +(defun ledger-navigate-find-xact-extents (pos) + "Return list containing point for beginning and end of xact containing POS. +Requires empty line separating xacts." + (interactive "d") + (save-excursion + (goto-char pos) + (list (ledger-navigate-beginning-of-xact) + (ledger-navigate-end-of-xact)))) + +;;; ledger-navigate.el ends here -- cgit v1.2.3