;;; Buid --- The builder for FG42 -*- lexical-binding: t; -*- ;; ;; Copyright (c) 2010-2021 Sameer Rahmani & Contributors ;; ;; Author: Sameer Rahmani ;; URL: https://gitlab.com/FG42/FG42 ;; Version: 3.0.0 ;; ;; 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 thnis program. If not, see . ;; ;;; Commentary: ;; Cubes are the building blocks of any `FG42' editor. Each `cube' is a ;; unit which defines different abilities in a deterministic and idempotent ;; way. Cubes are composable and a composition of cubes creates an editor. ;; ;;; Code: (require 'org-element) (defmacro comment (&rest _) "Ignore the given BODY." nil) (defun ->epoch (date-str) "Convert the given DATE-STR to epoch seconds." ;; Just because it's easier to deal with date in bash rather than elisp (string-to-number (shell-command-to-string (concat (format "date -d %s" date-str) " +%s")))) (defun get-buffer-global-props (prop) "Get a plists of global org properties PROP of current buffer." (car (org-element-map (org-element-parse-buffer) 'keyword (lambda (el) (when (string-match prop (org-element-property :key el)) (org-element-property :value el)))))) (defun get-file-global-props (file prop) "Return the value of the given global PROP in the given org FILE." (with-temp-buffer (insert-file-contents file) (get-buffer-global-props prop))) (defun pair-file-with-date (file) "Return a pair for the given FILE with date as car and file as cdr." (cons (->epoch (get-file-global-props file "DATE")) file)) (defun get-file-tags (file) "Returna list of tags for the given FILE." (with-temp-buffer (insert-file-contents file) (mapcar #'car (org-get-buffer-tags)))) (provide 'fg42/build/utils) ;;; utils.el ends here