From b976b5552473d58657d53f36a303b6424162184f Mon Sep 17 00:00:00 2001 From: Amy Grinn Date: Tue, 5 Oct 2021 16:30:49 -0400 Subject: Updated faces --- boxy-headlines.el | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/boxy-headlines.el b/boxy-headlines.el index 3a1672c..ed3c992 100644 --- a/boxy-headlines.el +++ b/boxy-headlines.el @@ -102,40 +102,24 @@ (defface boxy-headlines-default nil "Default face used in boxy mode.") -(defface boxy-headlines-primary nil +(defface boxy-headlines-primary + '((((background dark)) (:foreground "turquoise")) + (t (:foreground "dark cyan"))) "Face for highlighting the name of a box.") -(face-spec-set - 'boxy-headlines-primary - '((((background dark)) (:foreground "turquoise")) - (t (:foreground "dark cyan"))) - 'face-defface-spec) - -(defface boxy-headlines-selected nil +(defface boxy-headlines-selected + '((t :foreground "light slate blue")) "Face for the current box border under cursor.") -(face-spec-set - 'boxy-headlines-selected - '((t :foreground "light slate blue")) - 'face-defface-spec) - -(defface boxy-headlines-rel nil +(defface boxy-headlines-rel + '((t :foreground "hot pink")) "Face for the box which is related to the box under the cursor.") -(face-spec-set - 'boxy-headlines-rel - '((t :foreground "hot pink")) - 'face-defface-spec) - -(defface boxy-headlines-tooltip nil +(defface boxy-headlines-tooltip + '((((background dark)) (:background "gray30" :foreground "gray")) + (t (:background "gainsboro" :foreground "dim gray"))) "Face for tooltips in a boxy diagram.") -(face-spec-set - 'boxy-headlines-tooltip - '((((background dark)) (:background "gray30" :foreground "gray")) - (t (:background "gainsboro" :foreground "dim gray"))) - 'face-defface-spec) - ;;;; Pretty printing (cl-defun boxy-headlines-pp (box -- cgit v1.0 From 4469330551600185949590465b6c875c121bc957 Mon Sep 17 00:00:00 2001 From: Amy Grinn Date: Thu, 7 Oct 2021 18:54:14 -0400 Subject: Renamed from boxy-headlines to boxy-headings --- Eldev | 2 +- README.org | 18 ++-- boxy-headings.el | 307 +++++++++++++++++++++++++++++++++++++++++++++++++++++ boxy-headlines.el | 307 ----------------------------------------------------- demo/headings.gif | Bin 0 -> 651736 bytes demo/headlines.gif | Bin 651736 -> 0 bytes 6 files changed, 317 insertions(+), 317 deletions(-) create mode 100644 boxy-headings.el delete mode 100644 boxy-headlines.el create mode 100644 demo/headings.gif delete mode 100644 demo/headlines.gif diff --git a/Eldev b/Eldev index e69a361..2e16aa9 100644 --- a/Eldev +++ b/Eldev @@ -5,7 +5,7 @@ (eldev-use-local-dependency "deps/boxy" 'packaged) (eldev-defcommand - boxy_headlines-md5 (&rest _) + boxy_headings-md5 (&rest _) "Create md5 checksum of .tar and .el files in dist folder." (mapc (lambda (file) diff --git a/README.org b/README.org index 19f8d9d..ad9bcc5 100644 --- a/README.org +++ b/README.org @@ -1,18 +1,18 @@ -#+TITLE: Boxy Headlines +#+TITLE: Boxy Headings View org files as a boxy diagram. -=package-install RET boxy-headlines RET= +=package-install RET boxy-headings RET= * Usage -** =boxy-headlines= +** =boxy-headings= - To view all headlines in an org-mode file as a boxy diagram, use - the interactive function =boxy-headlines= + To view all headings in an org-mode file as a boxy diagram, use + the interactive function =boxy-headings= Suggested keybinding: #+begin_src emacs-lisp - (define-key org-mode-map (kbd "C-c r o") 'boxy-headlines) + (define-key org-mode-map (kbd "C-c r o") 'boxy-headings) #+end_src To modify the relationship between a headline and its parent, add @@ -28,7 +28,7 @@ View org files as a boxy diagram. The tooltip for each headline shows the values that would be displayed if the org file was in org columns view. - [[file:demo/headlines.gif]] + [[file:demo/headings.gif]] * License GPLv3 * Development @@ -39,10 +39,10 @@ View org files as a boxy diagram. ** Commands: *** =eldev lint= - Lint the =boxy-headlines.el= file + Lint the =boxy-headings.el= file *** =eldev compile= Test whether ELC has any complaints *** =eldev package= - Creates a dist folder with =boxy-headlines-.el= + Creates a dist folder with =boxy-headings-.el= *** =eldev md5= Creates an md5 checksum against all files in the dist folder. diff --git a/boxy-headings.el b/boxy-headings.el new file mode 100644 index 0000000..1b9097d --- /dev/null +++ b/boxy-headings.el @@ -0,0 +1,307 @@ +;;; boxy-headings.el --- View org files in a boxy diagram -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Free Software Foundation, Inc. + +;; Author: Tyler Grinn +;; Version: 1.0.2 +;; File: boxy-headings.el +;; Package-Requires: ((emacs "26.1") (boxy "1.0")) +;; Keywords: tools +;; URL: https://gitlab.com/tygrdev/boxy-headings + +;; 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 . + +;;; Commentary: + +;; The command `boxy-headings' will display all headings in the +;; current org file as a boxy diagram. The relationship between +;; a heading and its parent can be set by using a REL property on the +;; child heading. Valid values for REL are: +;; +;; - on top of +;; - in front of +;; - behind +;; - above +;; - below +;; - to the right of +;; - to the left of +;; +;; The tooltip in `boxy-headings' shows the values for each row +;; in `org-columns' and can be customized the same way as org +;; columns view. + +;;; Code: + +;;;; Requirements + +(require 'boxy) +(require 'eieio) +(require 'org-element) +(require 'org-colview) +(require 'cl-lib) + +;;;; Options + +(defgroup boxy-headings nil + "Customization options for boxy-headings" + :group 'applications) + +(defcustom boxy-headings-margin-x 2 + "Horizontal margin to be used when displaying boxes." + :type 'number) + +(defcustom boxy-headings-margin-y 1 + "Vertical margin to be used when displaying boxes." + :type 'number) + +(defcustom boxy-headings-padding-x 2 + "Horizontal padding to be used when displaying boxes." + :type 'number) + +(defcustom boxy-headings-padding-y 1 + "Vertical padding to be used when displaying boxes." + :type 'number) + +(defcustom boxy-headings-include-context t + "Whether to show context when opening a real link." + :type 'boolean) + +(defcustom boxy-headings-flex-width 80 + "When merging links, try to keep width below this." + :type 'number) + +(defcustom boxy-headings-default-visibility 1 + "Default level to display boxes." + :type 'number) + +(defcustom boxy-headings-tooltips t + "Show tooltips in a boxy diagram." + :type 'boolean) + +(defcustom boxy-headings-tooltip-timeout 0.5 + "Idle time before showing tooltip in a boxy diagram." + :type 'number) + +(defcustom boxy-headings-tooltip-max-width 30 + "Maximum width of all tooltips." + :type 'number) + +;;;; Faces + +(defface boxy-headings-default nil + "Default face used in boxy mode.") + +(defface boxy-headings-primary + '((((background dark)) (:foreground "turquoise")) + (t (:foreground "dark cyan"))) + "Face for highlighting the name of a box.") + +(defface boxy-headings-selected + '((t :foreground "light slate blue")) + "Face for the current box border under cursor.") + +(defface boxy-headings-rel + '((t :foreground "hot pink")) + "Face for the box which is related to the box under the cursor.") + +(defface boxy-headings-tooltip + '((((background dark)) (:background "gray30" :foreground "gray")) + (t (:background "gainsboro" :foreground "dim gray"))) + "Face for tooltips in a boxy diagram.") + +;;;; Pretty printing + +(cl-defun boxy-headings-pp (box + &key + (display-buffer-fn 'display-buffer-pop-up-window) + (visibility boxy-headings-default-visibility) + (max-visibility 2) + select + header + (default-margin-x boxy-headings-margin-x) + (default-margin-y boxy-headings-margin-y) + (default-padding-x boxy-headings-padding-x) + (default-padding-y boxy-headings-padding-y) + (flex-width boxy-headings-flex-width) + (tooltips boxy-headings-tooltips) + (tooltip-timeout boxy-headings-tooltip-timeout) + (tooltip-max-width boxy-headings-tooltip-max-width) + (default-face 'boxy-headings-default) + (primary-face 'boxy-headings-primary) + (tooltip-face 'boxy-headings-tooltip) + (rel-face 'boxy-headings-rel) + (selected-face 'boxy-headings-selected)) + "Pretty print BOX in a popup buffer. + +If HEADER is passed in, it will be printed above the diagram. + +DISPLAY-BUFFER-FN is used to display the diagram, by +default `display-buffer-pop-up-window'. + +If SELECT is non-nil, select the boxy window after displaying +it. + +VISIBILITY is the initial visibility of children and +MAX-VISIBILITY is the maximum depth to display when cycling +visibility. + +DEFAULT-MARGIN-X, DEFAULT-MARGIN-Y, DEFAULT-PADDING-X and +DEFAULT-PADDING-Y will be the fallback values to use if a box's +margin and padding slots are not set. + +When adding boxes, boxy will try to keep the width below +FLEX-WIDTH. + +If TOOLTIPS is nil, don't show any tooltips. + +TOOLTIP-TIMEOUT is the idle time to wait before showing a +tooltip. + +TOOLTIP-MAX-WIDTH is the maximum width of a tooltip. Lines +longer than this will be truncated. + +DEFAULT-FACE, PRIMARY-FACE, TOOLTIP-FACE, REL-FACE, and +SELECTED-FACE can be set to change the appearance of the boxy +diagram." + (boxy-pp box + :display-buffer-fn display-buffer-fn + :visibility visibility + :max-visibility max-visibility + :select select + :header header + :default-margin-x default-margin-x + :default-margin-y default-margin-y + :default-padding-x default-padding-x + :default-padding-y default-padding-y + :flex-width flex-width + :tooltips tooltips + :tooltip-timeout tooltip-timeout + :tooltip-max-width tooltip-max-width + :default-face default-face + :primary-face primary-face + :tooltip-face tooltip-face + :rel-face rel-face + :selected-face selected-face)) + +;;;; Commands + +;;;###autoload +(defun boxy-headings () + "View all org headings as a boxy diagram." + (interactive) + (let ((path (seq-filter + #'identity + (append (list (org-entry-get nil "ITEM")) + (reverse (org-get-outline-path))))) + (world (save-excursion (boxy-headings--parse-headings))) + match) + (boxy-headings-pp world + :display-buffer-fn 'display-buffer-same-window + :select t) + (while (and path (or (not match) (not (boxy-is-visible match t)))) + (setq match (boxy-find-matching (boxy-box :name (pop path)) world))) + (when match + (with-current-buffer (get-buffer "*Boxy*") + (boxy-jump-to-box match))))) + +;;;; Boxy implementation + +(defun boxy-headings--add-heading (heading parent) + "Add HEADING to world as a child of PARENT." + (with-slots (markers (parent-level level)) parent + (with-current-buffer (marker-buffer (car markers)) + (let* ((partitioned (seq-group-by + (lambda (h) + (let ((child-rel (or (org-entry-get + (org-element-property :begin h) + "REL") + "in"))) + (if (member child-rel boxy-children-relationships) + 'children + 'siblings))) + (cddr heading))) + (children (alist-get 'children partitioned)) + (siblings (alist-get 'siblings partitioned)) + (pos (org-element-property :begin heading)) + (columns (save-excursion (goto-char pos) (org-columns--collect-values))) + (max-column-length (apply #'max 0 + (mapcar + (lambda (column) + (length (cadr (car column)))) + columns))) + (rel (save-excursion (goto-char pos) (or (org-entry-get nil "REL") "in"))) + (level (if (member rel boxy-children-relationships) + (+ 1 parent-level) + parent-level)) + (name (org-element-property :title heading)) + (box (boxy-box :name (if (string-match org-link-bracket-re name) + (match-string 2 name) + name) + :rel rel + :level level + :rel-box parent + :parent parent + :tooltip (mapconcat + (lambda (column) + (format + (concat "%" (number-to-string max-column-length) "s : %s") + (cadr (car column)) + (cadr column))) + columns + "\n") + :markers (list (set-marker (point-marker) pos)) + :in-front (string= rel "in front of") + :on-top (string= rel "on top of") + :y-order (cond + ((string= rel "in front of") 1.0e+INF) + ((string= rel "on top of") -1.0e+INF) + (t 0)) + :primary t))) + (boxy-add-next box parent) + (if children + (object-add-to-list box :expand-children + `(lambda (box) + (mapc + (lambda (h) (boxy-headings--add-heading h box)) + ',children)))) + (if siblings + (object-add-to-list box :expand-siblings + `(lambda (box) + (mapc + (lambda (h) (boxy-headings--add-heading h box)) + ',children)))))))) + +;;;; Utility expressions + +(defun boxy-headings--parse-headings () + "Create a `boxy-box' from the current buffer's headings." + (org-columns-get-format) + (let* ((headings (cddr (org-element-parse-buffer 'headline))) + (filename (buffer-name)) + (title (or (concat (file-name-base filename) "." (file-name-extension filename)) + "Document")) + (world (boxy-box)) + (document (boxy-box :name title + :tooltip "" + :markers (list (point-min-marker))))) + (boxy-add-next document world) + (mapc + (lambda (heading) + (boxy-headings--add-heading heading document)) + headings) + world)) + +(provide 'boxy-headings) + +;;; boxy-headings.el ends here diff --git a/boxy-headlines.el b/boxy-headlines.el deleted file mode 100644 index ed3c992..0000000 --- a/boxy-headlines.el +++ /dev/null @@ -1,307 +0,0 @@ -;;; boxy-headlines.el --- View org files in a boxy diagram -*- lexical-binding: t -*- - -;; Copyright (C) 2021 Free Software Foundation, Inc. - -;; Author: Tyler Grinn -;; Version: 1.0.2 -;; File: boxy-headlines.el -;; Package-Requires: ((emacs "26.1") (boxy "1.0")) -;; Keywords: tools -;; URL: https://gitlab.com/tygrdev/boxy-headlines - -;; 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 . - -;;; Commentary: - -;; The command `boxy-headlines' will display all headlines in the -;; current org file as a boxy diagram. The relationship between -;; a headline and its parent can be set by using a REL property on the -;; child headline. Valid values for REL are: -;; -;; - on top of -;; - in front of -;; - behind -;; - above -;; - below -;; - to the right of -;; - to the left of -;; -;; The tooltip in `boxy-headlines' shows the values for each row -;; in `org-columns' and can be customized the same way as org -;; columns view. - -;;; Code: - -;;;; Requirements - -(require 'boxy) -(require 'eieio) -(require 'org-element) -(require 'org-colview) -(require 'cl-lib) - -;;;; Options - -(defgroup boxy-headlines nil - "Customization options for boxy-headlines" - :group 'applications) - -(defcustom boxy-headlines-margin-x 2 - "Horizontal margin to be used when displaying boxes." - :type 'number) - -(defcustom boxy-headlines-margin-y 1 - "Vertical margin to be used when displaying boxes." - :type 'number) - -(defcustom boxy-headlines-padding-x 2 - "Horizontal padding to be used when displaying boxes." - :type 'number) - -(defcustom boxy-headlines-padding-y 1 - "Vertical padding to be used when displaying boxes." - :type 'number) - -(defcustom boxy-headlines-include-context t - "Whether to show context when opening a real link." - :type 'boolean) - -(defcustom boxy-headlines-flex-width 80 - "When merging links, try to keep width below this." - :type 'number) - -(defcustom boxy-headlines-default-visibility 1 - "Default level to display boxes." - :type 'number) - -(defcustom boxy-headlines-tooltips t - "Show tooltips in a boxy diagram." - :type 'boolean) - -(defcustom boxy-headlines-tooltip-timeout 0.5 - "Idle time before showing tooltip in a boxy diagram." - :type 'number) - -(defcustom boxy-headlines-tooltip-max-width 30 - "Maximum width of all tooltips." - :type 'number) - -;;;; Faces - -(defface boxy-headlines-default nil - "Default face used in boxy mode.") - -(defface boxy-headlines-primary - '((((background dark)) (:foreground "turquoise")) - (t (:foreground "dark cyan"))) - "Face for highlighting the name of a box.") - -(defface boxy-headlines-selected - '((t :foreground "light slate blue")) - "Face for the current box border under cursor.") - -(defface boxy-headlines-rel - '((t :foreground "hot pink")) - "Face for the box which is related to the box under the cursor.") - -(defface boxy-headlines-tooltip - '((((background dark)) (:background "gray30" :foreground "gray")) - (t (:background "gainsboro" :foreground "dim gray"))) - "Face for tooltips in a boxy diagram.") - -;;;; Pretty printing - -(cl-defun boxy-headlines-pp (box - &key - (display-buffer-fn 'display-buffer-pop-up-window) - (visibility boxy-headlines-default-visibility) - (max-visibility 2) - select - header - (default-margin-x boxy-headlines-margin-x) - (default-margin-y boxy-headlines-margin-y) - (default-padding-x boxy-headlines-padding-x) - (default-padding-y boxy-headlines-padding-y) - (flex-width boxy-headlines-flex-width) - (tooltips boxy-headlines-tooltips) - (tooltip-timeout boxy-headlines-tooltip-timeout) - (tooltip-max-width boxy-headlines-tooltip-max-width) - (default-face 'boxy-headlines-default) - (primary-face 'boxy-headlines-primary) - (tooltip-face 'boxy-headlines-tooltip) - (rel-face 'boxy-headlines-rel) - (selected-face 'boxy-headlines-selected)) - "Pretty print BOX in a popup buffer. - -If HEADER is passed in, it will be printed above the diagram. - -DISPLAY-BUFFER-FN is used to display the diagram, by -default `display-buffer-pop-up-window'. - -If SELECT is non-nil, select the boxy window after displaying -it. - -VISIBILITY is the initial visibility of children and -MAX-VISIBILITY is the maximum depth to display when cycling -visibility. - -DEFAULT-MARGIN-X, DEFAULT-MARGIN-Y, DEFAULT-PADDING-X and -DEFAULT-PADDING-Y will be the fallback values to use if a box's -margin and padding slots are not set. - -When adding boxes, boxy will try to keep the width below -FLEX-WIDTH. - -If TOOLTIPS is nil, don't show any tooltips. - -TOOLTIP-TIMEOUT is the idle time to wait before showing a -tooltip. - -TOOLTIP-MAX-WIDTH is the maximum width of a tooltip. Lines -longer than this will be truncated. - -DEFAULT-FACE, PRIMARY-FACE, TOOLTIP-FACE, REL-FACE, and -SELECTED-FACE can be set to change the appearance of the boxy -diagram." - (boxy-pp box - :display-buffer-fn display-buffer-fn - :visibility visibility - :max-visibility max-visibility - :select select - :header header - :default-margin-x default-margin-x - :default-margin-y default-margin-y - :default-padding-x default-padding-x - :default-padding-y default-padding-y - :flex-width flex-width - :tooltips tooltips - :tooltip-timeout tooltip-timeout - :tooltip-max-width tooltip-max-width - :default-face default-face - :primary-face primary-face - :tooltip-face tooltip-face - :rel-face rel-face - :selected-face selected-face)) - -;;;; Commands - -;;;###autoload -(defun boxy-headlines () - "View all org headlines as a boxy diagram." - (interactive) - (let ((path (seq-filter - #'identity - (append (list (org-entry-get nil "ITEM")) - (reverse (org-get-outline-path))))) - (world (save-excursion (boxy-headlines--parse-headlines))) - match) - (boxy-headlines-pp world - :display-buffer-fn 'display-buffer-same-window - :select t) - (while (and path (or (not match) (not (boxy-is-visible match t)))) - (setq match (boxy-find-matching (boxy-box :name (pop path)) world))) - (when match - (with-current-buffer (get-buffer "*Boxy*") - (boxy-jump-to-box match))))) - -;;;; Boxy implementation - -(defun boxy-headlines--add-headline (headline parent) - "Add HEADLINE to world as a child of PARENT." - (with-slots (markers (parent-level level)) parent - (with-current-buffer (marker-buffer (car markers)) - (let* ((partitioned (seq-group-by - (lambda (h) - (let ((child-rel (or (org-entry-get - (org-element-property :begin h) - "REL") - "in"))) - (if (member child-rel boxy-children-relationships) - 'children - 'siblings))) - (cddr headline))) - (children (alist-get 'children partitioned)) - (siblings (alist-get 'siblings partitioned)) - (pos (org-element-property :begin headline)) - (columns (save-excursion (goto-char pos) (org-columns--collect-values))) - (max-column-length (apply #'max 0 - (mapcar - (lambda (column) - (length (cadr (car column)))) - columns))) - (rel (save-excursion (goto-char pos) (or (org-entry-get nil "REL") "in"))) - (level (if (member rel boxy-children-relationships) - (+ 1 parent-level) - parent-level)) - (name (org-element-property :title headline)) - (box (boxy-box :name (if (string-match org-link-bracket-re name) - (match-string 2 name) - name) - :rel rel - :level level - :rel-box parent - :parent parent - :tooltip (mapconcat - (lambda (column) - (format - (concat "%" (number-to-string max-column-length) "s : %s") - (cadr (car column)) - (cadr column))) - columns - "\n") - :markers (list (set-marker (point-marker) pos)) - :in-front (string= rel "in front of") - :on-top (string= rel "on top of") - :y-order (cond - ((string= rel "in front of") 1.0e+INF) - ((string= rel "on top of") -1.0e+INF) - (t 0)) - :primary t))) - (boxy-add-next box parent) - (if children - (object-add-to-list box :expand-children - `(lambda (box) - (mapc - (lambda (h) (boxy-headlines--add-headline h box)) - ',children)))) - (if siblings - (object-add-to-list box :expand-siblings - `(lambda (box) - (mapc - (lambda (h) (boxy-headlines--add-headline h box)) - ',children)))))))) - -;;;; Utility expressions - -(defun boxy-headlines--parse-headlines () - "Create a `boxy-box' from the current buffer's headlines." - (org-columns-get-format) - (let* ((headlines (cddr (org-element-parse-buffer 'headline))) - (filename (buffer-name)) - (title (or (concat (file-name-base filename) "." (file-name-extension filename)) - "Document")) - (world (boxy-box)) - (document (boxy-box :name title - :tooltip "" - :markers (list (point-min-marker))))) - (boxy-add-next document world) - (mapc - (lambda (headline) - (boxy-headlines--add-headline headline document)) - headlines) - world)) - -(provide 'boxy-headlines) - -;;; boxy-headlines.el ends here diff --git a/demo/headings.gif b/demo/headings.gif new file mode 100644 index 0000000..654b588 Binary files /dev/null and b/demo/headings.gif differ diff --git a/demo/headlines.gif b/demo/headlines.gif deleted file mode 100644 index 654b588..0000000 Binary files a/demo/headlines.gif and /dev/null differ -- cgit v1.0 From 0a5c9c23f628e2ce95a789e2119d61987f353b95 Mon Sep 17 00:00:00 2001 From: Amy Grinn Date: Thu, 7 Oct 2021 21:23:23 -0400 Subject: Bump version --- boxy-headings.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boxy-headings.el b/boxy-headings.el index 1b9097d..c2a2f3a 100644 --- a/boxy-headings.el +++ b/boxy-headings.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2021 Free Software Foundation, Inc. ;; Author: Tyler Grinn -;; Version: 1.0.2 +;; Version: 2.0.0 ;; File: boxy-headings.el ;; Package-Requires: ((emacs "26.1") (boxy "1.0")) ;; Keywords: tools -- cgit v1.0