-
Notifications
You must be signed in to change notification settings - Fork 5
/
search.cljs
87 lines (68 loc) · 3.17 KB
/
search.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
(ns lt.plugins.ltfiles.search
(:require [lt.objs.search :as search]
[lt.object :as object]
[lt.util.dom :as dom]
[lt.objs.command :as cmd]
[clojure.string :as s]
[lt.objs.files :as files]
[lt.plugins.ltfiles.clojure :as clojure]
[goog.string :as gs]
[lt.plugins.ltfiles.util :as util]))
(defmethod search/location "<directory>" [_]
[(util/current-directory)])
(defmethod search/location "<file>" [_]
[(util/current-file)])
(defmethod search/location "<folder>" [_]
[(util/current-folder)])
(defmethod search/location "<plugins>" [_]
[(files/lt-user-dir "plugins")])
(defn set-search [this v]
(dom/val (dom/$ :input.search (object/->content this)) v))
(defn set-location [this v]
(dom/val (dom/$ :input.loc (object/->content this)) v))
(defn set-replace [this v]
(dom/val (dom/$ :input.replace (object/->content this)) v))
(defn open-search-for [path]
(set-location search/searcher path)
(cmd/exec! :ltfiles.ensure-and-focus-second-tabset)
(cmd/exec! :searcher.show))
;; These commands could be composed in user.behaviors but that seems too messy
;; Would like to add selection detection to these but am limited by vim keys not
;; picking up selection
(cmd/command {:command :ltfiles.search-current-directory
:desc "ltfiles: Searches current directory"
:exec (partial open-search-for "<directory>")})
(cmd/command {:command :ltfiles.search-current-folder
:desc "ltfiles: Searches current folder"
:exec (partial open-search-for "<folder>")})
(cmd/command {:command :ltfiles.search-current-file
:desc "ltfiles: Searches current file"
:exec (partial open-search-for "<file>")})
(defn search-current-file-with-current-word []
(set-search search/searcher (clojure/current-word))
(set-location search/searcher "<file>")
(cmd/exec! :ltfiles.ensure-and-focus-second-tabset)
(cmd/exec! :searcher.show)
(cmd/exec! :searcher.search))
(cmd/command {:command :ltfiles.search-current-file-with-current-word
:desc "ltfiles: Searches current file with current word"
:exec search-current-file-with-current-word})
(defn search-current-folder-with-current-word []
(set-search search/searcher (clojure/current-word))
(set-location search/searcher "<folder>")
(cmd/exec! :ltfiles.ensure-and-focus-second-tabset)
(cmd/exec! :searcher.show)
(cmd/exec! :searcher.search))
(cmd/command {:command :ltfiles.search-current-folder-with-current-word
:desc "ltfiles: Searches current folder with current word"
:exec search-current-folder-with-current-word})
(defn search-current-folder-for-fn-usage []
(set-search search/searcher
(s/replace-first "/\\((\\S+\\/)?%s\\s+/" "%s" (gs/regExpEscape (clojure/current-word))))
(set-location search/searcher "<folder>")
(cmd/exec! :ltfiles.ensure-and-focus-second-tabset)
(cmd/exec! :searcher.show)
(cmd/exec! :searcher.search))
(cmd/command {:command :ltfiles.search-current-folder-for-fn-usage
:desc "ltfiles: Searches current folder for fn usage"
:exec search-current-folder-for-fn-usage})