system-manager-wakasu
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