From 6b22c96e64af1816808c9bac379475b5c61c3fbf Mon Sep 17 00:00:00 2001 From: Gerard Vermeulen Date: Sat, 28 May 2022 17:44:19 +0200 Subject: [PATCH] Fix narrow-or-widen-dwim by improved error handling --- README.org | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/README.org b/README.org index cd78a67..e04d07e 100644 --- a/README.org +++ b/README.org @@ -3685,46 +3685,50 @@ focussing out on the whole buffer. This allows to concentrate temporarily on for instance a particular function or paragraph by removing clutter. The "Do What I Mean" [[https://endlessparentheses.com/emacs-narrow-or-widen-dwim.html][narrow-or-widen-dwim]] function allows to toggle between narrowed and widened buffer states. Here, the function =narrow-or-widen-dwim= operates also -on tables by means of =org-narrow-to-table=. +on any Org table, Org source block, Org block, or Org subtree. #+caption[Configure =narrow-or-widen-dwim=]: #+caption: Configure =narrow-or-widen-dwim=. #+name: lst:configure-narrow-or-widen-dwim #+begin_src emacs-lisp (with-eval-after-load 'emacs - (autoload 'org-at-table "org-table") + (autoload 'org-at-table-p "org-table") (defun org-narrow-to-table () - "Narrow buffer to current table." + "Narrow buffer to table at point." (interactive) (if (org-at-table-p) (narrow-to-region (org-table-begin) (org-table-end)) (user-error "Not in a table"))) (defun narrow-or-widen-dwim (p) - "Widen if buffer is narrowed, narrow-dwim otherwise. - Dwim means: region, org-src-block, org-table, org-subtree, LaTeX - environment, TeX group, or defun, whichever applies first. - Narrowing to org-src-block actually calls `org-edit-src-code'. + "Widen if buffer is narrowed, narrow \"Do What I Mean\" otherwise. + DWIM means: region, Org table, Org source block, Org block, Org + subtree, LaTeX environment, TeX group, or defun, whichever + applies first. Narrowing to org-src-block actually calls + `org-edit-src-code'. + With prefix P, don't widen, just narrow even if buffer is already narrowed." (interactive "P") (declare (interactive-only)) - (cond ((and (buffer-narrowed-p) (not p)) (widen)) + (cond ((and (buffer-narrowed-p) (not p)) + (widen)) ((and (bound-and-true-p org-src-mode) (not p)) (org-edit-src-exit)) ((region-active-p) (narrow-to-region (region-beginning) (region-end))) ((derived-mode-p 'org-mode) - (or (ignore-errors (org-edit-src-code)) - (ignore-errors (org-narrow-to-block)) - (ignore-errors (org-narrow-to-table)) + (or (with-demoted-errors "DWIM: %S" (org-narrow-to-table) t) + (with-demoted-errors "DWIM: %S" (org-edit-src-code) t) + (with-demoted-errors "DWIM: %S" (org-narrow-to-block) t) (org-narrow-to-subtree))) ((derived-mode-p 'latex-mode) (LaTeX-narrow-to-environment)) ((derived-mode-p 'tex-mode) (TeX-narrow-to-group)) - (t (narrow-to-defun)))) + (t + (narrow-to-defun)))) (define-key ctl-x-map (kbd "n t") #'org-narrow-to-table) (define-key ctl-x-map (kbd "C-n") #'narrow-or-widen-dwim))