summaryrefslogblamecommitdiff
path: root/rt-liberation-org.el
blob: 70dd5360cd4c5792e3fdf5add550cbe555273fe3 (plain) (tree)


































                                                                                           
                     

                                                                 

                          








                                                                      



                                                   


                                             









                                                                     
          
                
 



                                                                          





                                                         



                                  
;;; rt-liberation-org.el --- Org integration for rt-liberation  -*- lexical-binding: t; -*-

;; Copyright (C) 2008-2021 Free Software Foundation, Inc.

;; Author: Yuchen Pei <hi@ypei.me>
;; Maintainer: Yoni Rabkin <yrk@gnu.org>

;; This file is a part of rt-liberation.

;; 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, write to the Free
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
;; MA 02111-1307, USA.

;;; Installation and Use:
;;
;; Detailed instructions for installation and use can be found in the
;; rt-liberation manual, in the doc/ directory of the distribution.

;;; History:
;;
;; Started near the end of 2008.
(require 'org)

(defun rt-org-open (link)
  "Opens the rt LINK.
	Open the rt ticket (for links starting with 'id:') or run
	the query (for links starting with 'query:')."
  (require 'rt-liberation)
  (cond
   ((string-match "^id:\\([^#]+\\)\\(#\\(.+\\)\\)?" link)
    (let ((id (match-string 1 link))
	  (section (string-to-number (or (match-string 3 link) "0"))))
      (rt-liber-browse-query (format "id = \"%s\"" id))
      (rt-liber-next-ticket-in-browser)
      (rt-liber-ticket-at-point)
      (dotimes (unused section)
	(rt-liber-viewer2-next-section-in))
      ))
   ((string-match "^query:\\(.+\\)" link)
    (rt-liber-browse-query (match-string 1 link)))
   (t (error "Unrecognized link type '%s'" link))))

(defun rt-org-store-link ()
  "Stores an rt link in ticket-browser mode."
  (require 'rt-liberation)
  (let ((ticket (or (get-text-property (point) 'rt-ticket)
		    rt-liber-ticket-local)))
    (when ticket
      (let (
	    (link (concat "rt:id:" (rt-liber-ticket-id-only ticket)))
	    (subject (cdr (assoc "Subject" ticket)))
	    )
	(org-link-add-props
	 :link link
	 :description subject
	 )
	link))))

;; org-add-link-type is obsolete as of org-mode 9. Instead we will use the
;; org-link-set-parameters method
(if (fboundp 'org-link-set-parameters)
    (org-link-set-parameters "rt"
			     :follow #'rt-org-open
			     :store  #'rt-org-store-link
			     )
  (org-add-link-type "rt" rt-org-open)
  (add-hook 'org-store-link-functions 'rt-org-store-link)
  )

;;; _
(provide 'rt-liberation-org)
;;; rt-liberation-org.el ends here