fedora-csb-system-manager
 1;;; ol-rg.el --- Links to rg -*- lexical-binding: t; -*-
 2
 3;; Copyright (C) 2020 Vincent Demeester
 4
 5;; Author: Vincent Demeester <vincent@sbr.pm>
 6;; Keywords: org link ripgrep rg.el
 7;; Version: 0.1
 8;; URL: https://gitlab.com/vdemeester/vorg
 9;; Package-Requires: ((emacs "26.0") (org "9.0") (rg "1.8.0"))
10;;
11;; This file is not part of GNU Emacs.
12
13;; This program is free software; you can redistribute it and/or
14;; modify it under the terms of the GNU General Public License as
15;; published by the Free Software Foundation; either version 3.0, or
16;; (at your option) any later version.
17
18;; This program is distributed in the hope that it will be useful,
19;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21;; GNU General Public License for more details.
22
23;; You should have received a copy of the GNU General Public License
24;; along with this program; if not, write to the Free Software
25;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27;;
28;;; Commentary:
29
30;; This file implements links to Ripgrep from within Org mode.
31;; rg:orgmode             : run ripgrep on current working dir with orgmode expression
32;; rg:orgmode:config/     : run ripgrep on config/ dir with orgmode expression
33;; rg:orgmode:config/#org : run ripgrep on config/ dir with orgmode expression
34
35;;; Code:
36
37(require 'rg)
38(require 'ol)
39
40;; Install the link type
41(org-link-set-parameters "rg"
42                         :follow #'org-rg-follow-link
43                         :face '(:foreground "DarkGreen" :underline t))
44
45(defun org-rg-follow-link (regexp)
46  "Run `rg` with REXEP as argument,
47like this : [[rg:REGEXP:FOLDER#FILTER]]"
48  (setq expressions (split-string regexp ":"))
49  (setq exp (nth 0 expressions))
50  (setq folderpart (nth 1 expressions))
51  (setq files (split-string folderpart "#"))
52  (setq folder (nth 0 files))
53  (setq filter (nth 1 files))
54  (if folderpart
55      (if filter
56          (rg exp (concat "*." filter) folder)
57        (rg exp "*" folder))
58    (rg exp "*" "./")))
59
60(provide 'ol-rg)
61;;; ol-rg.el ends here