Browse Source

* khardel-org.el: Add support for org-mode links.

tags/v0.2.0
Nicolas Petton 11 months ago
parent
commit
04f9b63651
No known key found for this signature in database
1 changed files with 64 additions and 0 deletions
  1. 64
    0
      khardel-org.el

+ 64
- 0
khardel-org.el View File

@@ -0,0 +1,64 @@
;;; khardel-org.el --- Support for links to khard contact buffers in org -*- lexical-binding: t; -*-

;; Copyright (C) 2019 Nicolas Petton

;; Author: Nicolas Petton <nicolas@petton.fr>
;; Url: https://gitlab.petton.fr/DamienCassou/khardel
;; Package-requires: ((emacs "25.1"))
;; Version: 0.1.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 this program. If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; This file implements org links to khard contact edit buffers. A query to
;; find a khard contact by its full name is performed when a link is followed.

;;; Code:

(require 'org)
(require 'map)
(require 'khardel)

(defun khardel-org--follow-link (fullname)
"Follow a khardel link specified by FULLNAME.
FULLNAME is a string to match against a contact name."
(let ((contact (seq-find (lambda (contact)
(string= (cdr contact) fullname))
(map-values (khardel--list-contacts)))))
(khardel-edit-contact contact)))

(defun khardel-org--link-complete (&optional _)
"Complete a contact name.
Return an `org-mode' link for the completed contact."
(khardel-org--link (khardel-choose-contact)))

(defun khardel-org--store-link ()
"Store a link to a khard contact from a khard contact edit buffer."
(when (eq major-mode 'khardel-edit-mode)
(org-store-link-props :type "khardel"
:description (cdr khardel-edit-contact)
:link (khardel-org--link khardel-edit-contact))))

(defun khardel-org--link (contact)
"Return an `org-mode' khardel link for CONTACT."
(format "khardel:%s" (cdr contact)))

(org-link-set-parameters "khardel"
:complete #'khardel-org--link-complete
:follow #'khardel-org--follow-link
:store #'khardel-org--store-link)

(provide 'khardel-org)
;;; khardel-org.el ends here

Loading…
Cancel
Save