diff options
author | Thanos Apollo <[email protected]> | 2024-09-05 19:27:15 +0300 |
---|---|---|
committer | Thanos Apollo <[email protected]> | 2024-09-05 19:27:44 +0300 |
commit | 731f0ba4910c872efedf7e460d904f3d9c3be9a7 (patch) | |
tree | ea50df01d2ea9dee092572875696afa545d3b419 /gnosis-org.el | |
parent | bc626d511c111545387df12219a6412506eaf5a1 (diff) | |
parent | d034335bde30c7873768bfbbae531a704d011245 (diff) |
Release version 0.4.2.0.4.2
* Comment out gnosis-org sections that are under development.
* gnosis-org should be ready by next version.
* Fix display issues on non-grapical interface.
* Add variable watchers for custom algorithm values.
* Update assertions for editing notes
This is a minor release with a few bug fixes.
Diffstat (limited to 'gnosis-org.el')
-rw-r--r-- | gnosis-org.el | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/gnosis-org.el b/gnosis-org.el new file mode 100644 index 0000000..e977083 --- /dev/null +++ b/gnosis-org.el @@ -0,0 +1,92 @@ +;;; gnosis-org.el --- Org module for Gnosis -*- lexical-binding: t; -*- + +;; Copyright (C) 2023-2024 Thanos Apollo + +;; Author: Thanos Apollo <[email protected]> +;; Keywords: extensions +;; URL: https://git.thanosapollo.org/gnosis +;; Version: 0.0.1 + +;; Package-Requires: ((emacs "27.2") (compat "29.1.4.2")) + +;; 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/>. + +;;; Commentary: + +;; Under development. + +;;; Code: + +(require 'cl-lib) +(require 'org) +(require 'org-element) + +(defun gnosis-org--global-props (name &optional buffer) + "Get the plists of global org properties by NAME in BUFFER. + +NAME is a string representing the property name to search for. +BUFFER defaults to the current buffer if not specified." + (cl-assert (stringp name) nil "NAME must be a string.") + (with-current-buffer (or buffer (current-buffer)) + (let ((elements (org-element-map (org-element-parse-buffer) 'keyword + (lambda (el) + (when (string= (org-element-property :key el) name) + el)) + nil t))) + (if elements elements + (message "No properties found for %s" name) + nil)))) + +(defun gnosis-org--heading-props (property &optional buffer) + "Get the values of a custom PROPERTY from all headings in BUFFER. + +PROPERTY is a string representing the property name to search for. +BUFFER defaults to the current buffer if not specified." + (cl-assert (stringp property) nil "PROPERTY must be a string.") + (with-current-buffer (or buffer (current-buffer)) + (let ((results nil)) + (org-element-map (org-element-parse-buffer) 'headline + (lambda (headline) + (let ((prop (org-element-property (intern (concat ":" property)) headline))) + (when prop + (push prop results))))) + (if results (reverse results) + (message "No custom properties found for %s" property) + nil)))) +;; TODO: Add support for tags. +(cl-defun gnosis-org-insert-heading (&key main id answer type) + "Insert an Org heading in current buffer. + +- MAIN as the title. +- ID as GNOSIS_ID. +- ANSWER as the subheading. +- TYPE as the note type. + +If BUFFER is not specified, defaults to the current buffer." + (cl-assert (stringp main) nil "MAIN must be a string representing the heading title.") + (cl-assert (stringp id) nil "ID must be a string representing the GNOSIS_ID.") + (cl-assert (stringp type) nil "TYPE must be a string representing the TYPE property.") + (let ((main (if (string-match-p "\n" main) (replace-regexp-in-string "\n" "\\\\n" main) main)) + (answer (cond ((stringp answer) + answer) + ((numberp answer) + (number-to-string answer)) + (t (mapconcat 'identity answer ", "))))) + (goto-char (point-max)) ;; Ensure we're at the end of the buffer + (insert (format "* %s\n:PROPERTIES:\n:GNOSIS_ID: %s\n:TYPE: %s\n:END:\n** %s\n" + main id type answer)) + (message "Inserted heading: %s with GNOSIS_ID %s and TYPE %s" main id type))) + +(provide 'gnosis-org) +;;; gnosis-org.el ends here. |