From 3278c7dd9d426bf205542c78d51456a96196988b Mon Sep 17 00:00:00 2001 From: Alex Branham Date: Tue, 10 Apr 2018 10:38:09 -0500 Subject: [PATCH] New minor mode org-pretty-mode * lisp/org-pretty.el: New file * etc/ORG-NEWS: Document new minor mode --- etc/ORG-NEWS | 9 ++++++ lisp/org-pretty.el | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 lisp/org-pretty.el diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 0edd77115..0339a2df3 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -228,7 +228,16 @@ parameters. See example bellow. select sysdate from dual; ,#+END_SRC #+END_SRC +*** New minor mode ~org-pretty-mode~ supports showing prettier characters. +By default, it replaces asterisks in headings with a utf8 bullet: • +To enable, either call M-x org-pretty-mode or add + +#+BEGIN_SRC elisp + (add-hook 'org-mode-hook #'org-pretty-mode) +#+END_SRC + +to your configuration file. ** New functions *** ~org-insert-structure-template~ diff --git a/lisp/org-pretty.el b/lisp/org-pretty.el new file mode 100644 index 000000000..2f2aaa68d --- /dev/null +++ b/lisp/org-pretty.el @@ -0,0 +1,71 @@ +;;; org-pretty.el --- Support for prettify-symbols-mode -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Free Software Foundation, Inc. +;; +;; Author: J. Alexander Branham +;; Maintainer: emacs-orgmode@gnu.org +;; +;; This file is part of GNU Emacs. +;; +;; GNU Emacs 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. + +;; GNU Emacs 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. If not, see . +;; +;;; Commentary: +;; +;; This file adds support for `prettify-symbols-mode' in Org buffers. +;; To use, call M-x org-prettify-mode or put +;; +;; (add-hook 'org-mode-hook #'org-prettify-mode) +;; +;; in your configuration file. + +;;; Code: + +(require 'org) + +(defvar-local org-pretty-alist '(("*" . ?•)) + "An alist of symbols to prettify, see `prettify-symbols-alist'. +Whether the symbol actually gets prettified is controlled by +`org-pretty-compose-p', which see.") + +(defun org-pretty-compose-p (start end match) + "Return non-nil if the symbol between START and END is to be prettified. +MATCH is the string match. See also +`prettify-symbols-compose-predicate'." + (if (string= match "*") + ;; Prettify asterisks in headings. + (and (org-match-line org-outline-regexp-bol) + (< end (match-end 0))) + ;; Else rely on the default function. + (funcall #'prettify-symbols-default-compose-p start end match))) + +;;;###autoload +(define-minor-mode org-pretty-mode + "Set up `prettify-symbols-mode' in org buffers." + :lighter nil + :keymap nil + (if org-pretty-mode + ;; Turn on. + (when (eq major-mode 'org-mode) + (setq-local prettify-symbols-alist org-pretty-alist) + (setq-local prettify-symbols-compose-predicate #'org-pretty-compose-p) + (prettify-symbols-mode)) + ;; Turn off. + (when (eq major-mode 'org-mode) + (setq-local prettify-symbols-alist nil) + (setq-local prettify-symbols-compose-predicate #'prettify-symbols-default-compose-p) + (prettify-symbols-mode -1)))) + +(provide 'org-pretty) + +;;; org-pretty.el ends here -- 2.17.0