Skip to content

Instantly share code, notes, and snippets.

@dustinlacewell-wk
Created January 18, 2018 23:55
Show Gist options
  • Save dustinlacewell-wk/bf3e700636c512177cfeb180d705da8f to your computer and use it in GitHub Desktop.
Save dustinlacewell-wk/bf3e700636c512177cfeb180d705da8f to your computer and use it in GitHub Desktop.

Navigation

Nested Narrowing

Hooks

These hooks are called before and after narrowing and widening operations.

(defvar nn-before-narrow-hook (list) "Called before any nn narrowing operation")
(defvar nn-after-narrow-hook (list) "Called after any nn narrowing operation")
(defvar nn-before-widen-hook (list) "Called before any nn widening operation")
(defvar nn-after-widen-hook (list) "Called after any nn widening operation")

nn-narrow-stack

This list variable represents a stack of previous narrowing operations.

Elements are lists of the form (list start end)

(defvar nn-narrow-stack (list) "Represents a stack of previous narrowing operations.")

nn-narrow

(defun nn-narrow ()
  (interactive)
  (if (> 0 (length nn-before-narrow-hook))
      (mapcar (lambda (f) (f)) 'nn-before-narrow-hook))

  (let ((elem (list (point-min) (point-max))))
    (setq nn-narrow-stack (push elem nn-narrow-stack)))
  (org-narrow-to-subtree)

  (if (> 0 (length nn-after-narrow-hook))
      (mapcar (lambda (f) (f)) 'knowt-after-narrow-hook)))

nn-widen

(defun nn-widen ()
  (if nn-narrow-stack
      (progn
        (if (> 0 (length nn-narrow-stack))
            (if (> 0 (length nn-before-widen-hook))
                (mapcar (lambda (f) (f)) 'nn-before-widen-hook))

            (let ((prev-region (pop nn-narrow-stack)))
              (widen)
              (destructuring-bind (start end) prev-region
                (narrow-to-region start end)))

            (if (> 0 (length nn-after-widen-hook))
                (mapcar (lambda (f) (f)) 'knowt-after-widen-hook))))))

nn-narrow-regexp

Performs a regexp search before narrowing.

(defun nn-narrow-regexp (term)
  (beginning-of-buffer)
  (search-forward-regexp (format "^[\\*].*%s" term))
  (nn-narrow))

nn-narrow-occur

Performs an occur search before narrowing.

(defun nn-narrow-occur ()
  (helm-occur)
  (nn-narrow))

nn-narrow-heading

Performs a heading search before narrowing.

(defun nn-narrow-heading ()
  (helm-org-in-buffer-headings)
  (outline-hide-subtree)
  (nn-narrow))

Auto-Narrowings

(defun nn-reset ()
  (widen)
  (beginning-of-buffer)
  (org-global-cycle 3))

(defun nn-narrow-to (heading)
  (nn-reset)
  (nn-narrow-regexp heading)
  (org-global-cycle 3)
  (beginning-of-buffer))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment