On Mon, 24 Jan 2022, 11:14 Russell Adams, <rlad...@adamsinfoserv.com> wrote:

> Why not just do an ASCII export to a temporary read only buffer for
> viewing?
>

Do you mean that you're agreeing with the concept, but finding the
implementation unnecessarily complicated?


> I always thought the point of Org was to have minimal markup so that
> the native file was plainly legible.
>
> On Sun, Jan 23, 2022 at 08:19:12AM +0100, Arthur Miller wrote:
> > Hi mailing list,
> >
> > is something like this of interest to add to org-mode?
> >
> > Attached is a prototype to a read-only view mode. It tries to hide as
> much of
> > markup as possible to make it more "readable". It uses built-in
> view-mode to
> > make the buffer read only and enable some common commands. I plan to add
> more
> > "dired like" movement though.
> >
> > I don't claim it is very well written or efficient; I appreciate input
> on that
> > regard. To note is that I use minor-modes as "toggles", to make the
> > functionality avialable as "solo pieces" as well as a code generation
> tool.
> >
> > I am just checking interest here. More info and a screencast are
> avialable at:
> >
> > https://github.com/amno1/org-view-mode
> >
>
> > ;;; org-view-mode.el --- Read-only viewer with less markup clutter in
> org mode files  -*- lexical-binding: t; -*-
> >
> > ;; Copyright (C) 2021  Arthur Miller
> >
> > ;; Author: Arthur Miller <arthur.mil...@live.com>
> > ;; Keywords: convenience, outlines, tools
> >
> > ;; This program 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 3 of the License, or
> > ;; (at your option) any later version.
> >
> > ;; This program 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 this program.  If not, see <https://www.gnu.org/licenses/
> >.
> >
> > ;; Author: Arthur Miller
> > ;; Version: 0.0.1
> > ;; Keywords: tools convenience
> > ;; Package-Requires: ((emacs "24.1"))
> > ;; URL: https://github.com/amno1/org-view-mode
> >
> > ;;; Commentary:
> >
> > ;; A minor mode to help reduce clutter in org-mode files by
> > ;; hiding/unhiding org-mode markup language
> > ;;
> > ;; To turn it on execute:
> > ;;
> > ;;          `M-x org-view-mode'.
> > ;;
> > ;; To turn it off execute the same command.
> >
> > ;;; Issues
> >
> > ;;; Code:
> > (require 'org)
> >
> > (defgroup org-view nil
> >   "Hide tags in org-headings."
> >   :prefix "org-view-"
> >   :group 'org)
> >
> > (defvar-local org-view-center-credentials nil
> >   "Whether to align title and author in center or not.
> >
> > Centering is done pixel wise relative to window width.")
> >
> > (defcustom org-view-diminish-mode t
> >   "Hide lighters for individual minor modes when org-view-mode is on."
> >   :type 'boolean
> >   :group 'org-view)
> >
> > (defvar org-view-stars-re "^[ \t]*\\*+"
> >   "Regex used to recognize leading stars in org-headings.")
> >
> > (defvar org-view-credentials-re "[ \t]*#\\+\\(TITLE\\|AUTHOR\\):"
> >   "Regex used to update author and title lines.")
> >
> > (defun org-view--update-tags (visibility)
> >   "Update invisible property to VISIBILITY for tags in the current
> buffer."
> >   (save-excursion
> >     (goto-char (point-min))
> >     (with-silent-modifications
> >       (while (re-search-forward org-view-stars-re nil t)
> >         (goto-char (line-end-position))
> >         (when (re-search-backward org-tag-line-re
> (line-beginning-position) t)
> >             (put-text-property
> >              (match-beginning 1) (match-end 1) 'invisible visibility))
> >           (forward-line)))))
> >
> > (defun org-view--update-keywords (visibility)
> >   "Set VISIBILITY for each line starting with a keyword from KEYWORDS
> list."
> >   (org-with-wide-buffer
> >    (save-excursion
> >      (with-silent-modifications
> >        (goto-char (point-min))
> >        (while (re-search-forward "^[ \t]*#\\+.*$" nil t)
> >          (goto-char (match-beginning 0))
> >          (unless (looking-at-p org-view-credentials-re)
> >            (put-text-property
> >             (1- (match-beginning 0)) (match-end 0) 'invisible
> visibility))
> >          (goto-char (match-end 0)))))))
> >
> > (defun org-view--update-properties (visibility)
> >   "Set invisible property to VISIBILITY for properties in the current
> buffer."
> >   (org-with-wide-buffer
> >    (save-excursion
> >      (with-silent-modifications
> >        (goto-char (point-min))
> >        (while (re-search-forward org-property-drawer-re nil t)
> >          (put-text-property
> >           (match-beginning 0) (match-end 0) 'invisible visibility))
> >        (goto-char (point-min))
> >        (while (re-search-forward "^[ \t]*#\\+PROPERTY:.*$" nil t)
> >          (put-text-property
> >           (1- (match-beginning 0)) (1+ (match-end 0)) 'invisible
> visibility))))))
> >
> > (defun org-view--update-stars (visibility)
> >   "Update invisible property to VISIBILITY for markers in the current
> buffer."
> >   (org-with-wide-buffer
> >    (save-excursion
> >      (goto-char (point-min))
> >      (with-silent-modifications
> >        (while (re-search-forward org-view-stars-re nil t)
> >          (put-text-property
> >           (match-beginning 0) (match-end 0) 'invisible visibility))))))
> >
> > (defun org-view--update-credentials (visibility)
> >   "Set invisible property to VISIBILITY for export settings."
> >   (org-with-wide-buffer
> >    (save-excursion
> >      (with-silent-modifications
> >        (goto-char (point-min))
> >        (while (re-search-forward org-view-credentials-re nil t)
> >          (put-text-property
> >           (match-beginning 0) (match-end 0) 'invisible visibility)
> >          (when org-view-center-credentials
> >            (org-view--center-in-window visibility)))
> >        (goto-char (point-min))))))
> >
> > (defun org-view--center-in-window (center)
> >   "Center a line in a window pixel wise."
> >   (save-excursion
> >     (goto-char (line-beginning-position))
> >     (let ((end (line-end-position))
> >           (beg (line-beginning-position)))
> >       (if center
> >           (let* ((line (buffer-substring beg end))
> >                  (length (/ (string-pixel-width line) 2)))
> >             (put-text-property
> >              beg (1+ beg) 'display `(space :align-to (- center
> (,length)))))
> >         (remove-text-properties beg (1+ beg) '(display nil))))))
> >
> > ;;;###autoload
> > (define-minor-mode org-view-hide-tags-mode
> >   "Hide/show tags in org-headings."
> >   :global nil :lighter " org-htm"
> >   (unless (derived-mode-p 'org-mode)
> >     (error "Not in org-mode"))
> >   (org-view--update-tags org-view-hide-tags-mode))
> >
> > ;;;###autoload
> > (define-minor-mode org-view-hide-stars-mode
> >   "Hide/show leading stars in org-headings."
> >   :global nil :lighter " org-hsm"
> >   (unless (derived-mode-p 'org-mode)
> >     (error "Not in org-mode"))
> >   (org-view--update-stars org-view-hide-stars-mode))
> >
> > ;;;###autoload
> > (define-minor-mode org-view-hide-keywords-mode
> >   "Hide/show leading stars in org-headings."
> >   :global nil :lighter " org-hkm"
> >   (unless (derived-mode-p 'org-mode)
> >     (error "Not in org-mode"))
> >   (org-view--update-keywords org-view-hide-stars-mode))
> >
> > ;;;###autoload
> > (define-minor-mode org-view-hide-properties-mode
> >   "Hide/show properties and property drawers."
> >   :global nil :lighter " org-hpm"
> >   (unless (derived-mode-p 'org-mode)
> >     (error "Not in org-mode"))
> >   (org-view--update-properties org-view-hide-properties-mode))
> >
> > ;;;###autoload
> > (define-minor-mode org-view-pretty-credentials-mode
> >   "Prettify credentials in org-buffers."
> >   :global nil :lighter " org-pcm"
> >   (unless (derived-mode-p 'org-mode)
> >     (error "Not in org-mode"))
> >   (org-view--update-credentials org-view-pretty-credentials-mode))
> >
> > (defun org-view-quit ()
> >   (interactive)
> >   (org-view-mode -1)
> >   (message "org-view mode disabled in current buffer"))
> >
> > (defvar-keymap org-view-mode-map
> >   :doc "Keymap for ‘ORG-view-mode’"
> >   "c" #'org-view-quit
> >   "C" #'org-view-quit
> >   "e" #'org-view-quit
> >   "E" #'org-view-quit
> >   "q" #'org-view-quit
> >   "Q" #'org-view-quit)
> >
> > ;;;###autoload
> > (define-minor-mode org-view-mode
> >   "Hide/show babel source code blocks on demand."
> >   :global nil :lighter " org-view" :keymap org-view-mode-map
> >   (unless (derived-mode-p 'org-mode)
> >     (error "Not in org-mode"))
> >   (cond (org-view-mode
> >          (org-view-hide-tags-mode org-view-mode)
> >          (org-view-hide-stars-mode org-view-mode)
> >          (org-view-hide-keywords-mode org-view-mode)
> >          (org-view-hide-properties-mode org-view-mode)
> >          (org-view-pretty-credentials-mode org-view-mode)
> >          (when org-view-diminish-mode
> >            (dolist (mode '(org-view-hide-tags-mode
> >                            org-view-hide-stars-mode
> >                            org-view-hide-keywords-mode
> >                            org-view-hide-properties-mode
> >                            org-view-pretty-credentials-mode))
> >              (let ((mode-str (cdr (assq mode minor-mode-alist))))
> >                (setcar mode-str ""))))
> >          (view-mode +1))
> >         (t (view-mode -1)
> >            (org-view-hide-tags-mode -1)
> >            (org-view-hide-stars-mode -1)
> >            (org-view-hide-keywords-mode -1)
> >            (org-view-hide-properties-mode -1)
> >            (org-view-pretty-credentials-mode -1))))
> >
> > (provide 'org-view-mode)
> >
> > ;;; org-view-mode.el ends here
>
>
>
> ------------------------------------------------------------------
> Russell Adams                            rlad...@adamsinfoserv.com
>
> PGP Key ID:     0x1160DCB3           http://www.adamsinfoserv.com/
>
> Fingerprint:    1723 D8CA 4280 1EC9 557F  66E8 1154 E018 1160 DCB3
>
>

Reply via email to