[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/gnosis 11e526b496 02/19: New module: gnosis-org: Use org-m
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/gnosis 11e526b496 02/19: New module: gnosis-org: Use org-mode with gnosis. |
Date: |
Thu, 5 Sep 2024 13:00:29 -0400 (EDT) |
branch: elpa/gnosis
commit 11e526b4965412c1632461eb3961b6ebb22d8ec9
Author: Thanos Apollo <public@thanosapollo.org>
Commit: Thanos Apollo <public@thanosapollo.org>
New module: gnosis-org: Use org-mode with gnosis.
* This module will handle exports of decks as org files.
* Sync of org files/deck exports with database.
The main goal of incorporating org-mode is to promote collaboration of
decks through git integration.
---
gnosis-org.el | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/gnosis-org.el b/gnosis-org.el
new file mode 100644
index 0000000000..e194e88bc7
--- /dev/null
+++ b/gnosis-org.el
@@ -0,0 +1,87 @@
+;;; gnosis-org.el --- Org module for Gnosis -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2023-2024 Thanos Apollo
+
+;; Author: Thanos Apollo <public@thanosapollo.org>
+;; 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))))
+
+(cl-defun gnosis-org-insert-custom-heading (&key main id body type (buffer
(current-buffer)))
+ "Insert an Org heading in BUFFER.
+
+- MAIN as the title.
+- ID as CUSTOM_ID.
+- BODY as the content.
+- 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
CUSTOM_ID.")
+ (cl-assert (stringp body) nil "BODY must be a string representing the
content.")
+ (cl-assert (stringp type) nil "TYPE must be a string representing the TYPE
property.")
+ (with-current-buffer buffer
+ (goto-char (point-max)) ;; Ensure we're at the end of the buffer
+ (insert (format "* %s\n:PROPERTIES:\n:CUSTOM_ID: %s\n:TYPE:
%s\n:END:\n%s\n" main id type body))
+ (message "Inserted heading: %s with CUSTOM_ID %s and TYPE %s" main id
type)))
+
+(provide 'gnosis-org)
+;;; gnosis-org.el ends here.
- [nongnu] elpa/gnosis updated (013fca6bae -> 731f0ba491), ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 48ca4aa6f2 07/19: [Refactor] Rewrite org-insert-heading, ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis a783b56772 10/19: New function: Add validate-custom-values., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 56ed928045 09/19: export-deck: Add demo export., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 1e8e5fc529 11/19: New variable-watcher: custom-values-watcher., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis d034335bde 18/19: Packaging: Add version 0.4.2., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 4d90489c5b 05/19: elpaignore: Add manifest.scm, ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 11e526b496 02/19: New module: gnosis-org: Use org-mode with gnosis.,
ELPA Syncer <=
- [nongnu] elpa/gnosis cfa0462972 01/19: packaging: Version 0.4.2-dev, ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 061633adca 03/19: packaging: Require emacsql-4.0.1., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 487d903de1 04/19: New file: Add manifest.scm, ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 02a4e13520 12/19: [fix] display-images: Display images only on graphical envs., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis bb1469aad5 08/19: Update todos., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis bc626d511c 16/19: dashboard: Update dashboard-mode keymap., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 8f0bb68c87 14/19: demo: Update formatting (aesthetics)., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 52da178372 15/19: Rewrite README as markdown, ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 731f0ba491 19/19: Release version 0.4.2., ELPA Syncer, 2024/09/05
- [nongnu] elpa/gnosis 907308c45e 06/19: makefile: Add tests & use quick (-Q) option., ELPA Syncer, 2024/09/05