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")
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.")
(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)))
(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))))))
Performs a regexp search before narrowing.
(defun nn-narrow-regexp (term)
(beginning-of-buffer)
(search-forward-regexp (format "^[\\*].*%s" term))
(nn-narrow))
Performs an occur search before narrowing.
(defun nn-narrow-occur ()
(helm-occur)
(nn-narrow))
Performs a heading search before narrowing.
(defun nn-narrow-heading ()
(helm-org-in-buffer-headings)
(outline-hide-subtree)
(nn-narrow))
(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))