;;; km-denote.el --- Denote-related extensions -*- lexical-binding: t; -*- ;; Copyright Kyle Meyer ;; Author: Kyle Meyer ;; URL: https://git.kyleam.com/emacs.d ;; 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 . ;;; Code: (require 'denote) ;;;###autoload (defun km/denote-add-frontmatter () "Insert front matter into current file. Unlike an interactive call to `denote-add-front-matter', this does not prompt for the title and keywords; it just takes them from the file name." (interactive) (let ((fname (or (buffer-file-name) (user-error "Buffer not visiting file")))) (denote-add-front-matter fname (denote-retrieve-filename-title fname) (denote-extract-keywords-from-path fname)))) ;;;###autoload (defun km/denote-find-file-at-point () "Find the file in `denote-directory' for the denote ID at point. The file must be tracked in Git." (interactive) (let ((id (save-excursion (let ((case-fold-search nil)) (skip-chars-backward "-a-z0-9_T")) (if (looking-at denote-id-regexp) (match-string-no-properties 0) (user-error "No denote ID at point")))) (default-directory denote-directory)) (find-file (car (or (process-lines "git" "ls-files" "--" (concat id "--*")) (process-lines "git" "ls-files" "--" (concat "**/" id "--*")) (user-error "No tracked file found for %s" id)))))) (defun km/denote-insert-id (&optional with-prefix) "Insert ID of tracked file in `denote-directory'. When WITH-PREFIX is non-nil, prepend \"denote:\" to the inserted ID." (interactive "P") (let* ((default-directory denote-directory) (id (or (denote-extract-id-from-string (completing-read "Note: " (process-lines "git" "ls-files" "--" "*--*"))) (error "Could not determine ID")))) (insert (concat (and with-prefix "denote:") id)))) (provide 'km-denote) ;;; km-denote.el ends here