| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- ;;; org-ics.el --- icsorg npm package wrapper -*- lexical-binding: t; -*-
- ;; Copyright (C) 2023
- ;; Author: <bodicsek@nerdmail.co>
- ;; Keywords: calendar, extensions, processes
- ;; 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:
- ;; This package wraps the icsorg npm package.
- ;; It provides an autoloaded org-ics-sync function that invokes icsorg with the configured
- ;; custom variables.
- ;; The result is a an org file that can be used in org-agenda.
- ;; The synchronization is one way: ics -> org.
- ;;; Code:
- ;;=============================== custom variables ==============================
- (defgroup org-ics nil
- "org-ics functions and settings."
- :group 'external
- :tag "org-ics"
- :prefix "org-ics-")
- (defcustom org-ics-executable (executable-find "icsorg")
- "The icsorg executable."
- :group 'org-ics
- :type 'string)
- (defcustom org-ics-ics-file nil
- "The ics file that should be converted to org. It can be an url."
- :group 'org-ics
- :type 'string)
- (defcustom org-ics-org-file nil
- "The org file that should be created from your `org-ics-ics-file'."
- :group 'org-ics
- :type 'string)
- (defcustom org-ics-past 7
- "How far back in time (number of days) should we grab the calendar entries from `org-ics-ics-file'."
- :group 'org-ics
- :type 'natnum)
- (defcustom org-ics-future 14
- "How far forward in time (number of days) should we grab the calendar entries from `org-ics-ics-file'."
- :group 'org-ics
- :type 'natnum)
- ;;=============================== commands ==============================
- ;;;###autoload
- (defun org-ics-sync ()
- "Runs icsorg executable with the customized variables."
- (interactive)
- (let* ((ret (funcall 'org-ics--raw-run-icsorg
- "-i" org-ics-ics-file
- "-o" (expand-file-name org-ics-org-file)
- "-p" (number-to-string org-ics-past)
- "-f" (number-to-string org-ics-future)))
- (exit-code (nth 0 ret))
- (output (nth 1 ret)))
- (if (eq exit-code 0)
- output
- "org-ics-sync error")))
- (defun org-ics--raw-run-icsorg (&rest args)
- "Run icsorg with ARGS.
- Returns a list with the first element being the exit code and the
- second element being the output."
- (with-temp-buffer
- (list (apply 'call-process org-ics-executable nil (current-buffer) nil args)
- (replace-regexp-in-string "\n$" "" (buffer-string)))))
- (provide 'org-ics)
- ;;; org-ics.el ends here
|