├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── exec.js
├── history.js
├── index.js
├── package-lock.json
├── package.json
└── screenshot.gif
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (http://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Hi! Thanks for giving this a read!
2 |
3 | Super exciting to see your contribution!
4 |
5 |
6 |
7 | #### Can I implement feature X?
8 |
9 | 1. Before writing the code for your feature, please [create an issue here](https://github.com/siddharthkp/historie/issues/new?labels=feature%20request).
10 |
11 | 2. Sometimes, the feature you have in mind might already exist! or might not fit well in the tool.
12 |
13 | 3. It breaks my heart to say no to a pull request. So, please let's talk about it first on an issue!
14 |
15 |
16 |
17 | #### How do I contribute code?
18 |
19 | 1. Fork this repo on github.
20 |
21 | 2. Clone it on your machine: `git clone https://github.com/YOUR_USERNAME/historie.git`
22 |
23 | 3. Run `npm install`
24 |
25 | 4. Run `npm start` to ensure the repository is setup correctly.
26 |
27 | 5. Make your changes.
28 |
29 | 6. Make sure that it works: `npm start`
30 |
31 | 7. Submit a pull request to the original historie repository through GitHub.
32 |
33 | 8. Choose a nice title and describe the changes you have made.
34 |
35 | 9. Do a little dance!
36 |
37 |
38 |
39 | #### Structure
40 |
41 | - `index.js` This is the cli entry file, it joins everything together.
42 |
43 | - `history.js` Gives suggestions based on your input
44 | - `exec.js` Executes the selected command
45 |
46 | #### Doubts?
47 |
48 | Feel free to open an issue or reach out to me [on twitter](https://twitter.com/siddharthkp).
49 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Siddharth Kshetrapal
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | A searchable history cli
4 |
5 |
6 |
7 |
8 |
9 | #### Install
10 |
11 | ```sh
12 | npm install historie -g
13 | ```
14 |
15 | If you're on npm >= 5.2 you can also run historie through npx
16 |
17 | ```sh
18 | npx historie
19 | ```
20 |
21 |
22 |
23 | #### Usage
24 |
25 |
26 |
27 |
28 |
29 | #### like it?
30 |
31 | ⭐️ this repo
32 |
33 |
34 |
35 | #### todo
36 |
37 | - Give preference to recent commands
38 |
39 |
40 |
41 | #### License
42 |
43 | MIT © siddharthkp
44 |
--------------------------------------------------------------------------------
/exec.js:
--------------------------------------------------------------------------------
1 | const execa = require('execa')
2 | const chalk = require('chalk')
3 | const ora = require('ora')
4 |
5 | const spinner = ora()
6 | spinner.color = 'yellow'
7 |
8 | const print = ({ code, stdout, stderr }) => {
9 | let colors
10 | if (code === 1) {
11 | spinner.fail()
12 | colors = { out: chalk.red, err: chalk.red }
13 | } else {
14 | spinner.succeed()
15 | colors = { out: chalk.green, err: chalk.yellow }
16 | }
17 |
18 | console.log('\n' + colors.out(stdout))
19 | console.log('\n' + colors.err(stderr))
20 | }
21 |
22 | module.exports = command => {
23 | spinner.text = command
24 | spinner.start()
25 |
26 | execa
27 | .shell(command)
28 | .then(result => print(result))
29 | .catch(result => print(result))
30 | }
31 |
--------------------------------------------------------------------------------
/history.js:
--------------------------------------------------------------------------------
1 | const Fuse = require('fuse.js')
2 | const unique = require('lodash.uniq')
3 | const history = require('shell-history')()
4 |
5 | module.exports = hint => {
6 | return new Promise(resolve => {
7 | /* fuse likes objects */
8 | const historyMap = history.map(h => ({ command: h }))
9 | const options = { keys: ['command'] }
10 |
11 | const fuse = new Fuse(historyMap, options)
12 | const matchingHistory = fuse.search(hint)
13 |
14 | let choices = unique(matchingHistory.map(h => h.command))
15 | choices = choices.filter((c) => c);
16 |
17 | if (!choices.length) resolve(history)
18 | else resolve(choices)
19 | })
20 | }
21 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const inquirer = require('inquirer')
4 | const history = require('./history')
5 | const exec = require('./exec')
6 | const autocomplete = require('inquirer-autocomplete-prompt')
7 |
8 | console.log() // Breathing space
9 |
10 | const options = {
11 | type: 'autocomplete',
12 | name: 'command',
13 | message: '$',
14 | source: (_, input) => history(input || '') // Filtered history
15 | }
16 |
17 | inquirer.registerPrompt('autocomplete', autocomplete)
18 | inquirer.prompt(options).then(({ command }) => exec(command))
19 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "historie",
3 | "version": "1.0.1",
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "ansi-escapes": {
7 | "version": "1.4.0",
8 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
9 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
10 | },
11 | "ansi-regex": {
12 | "version": "2.1.1",
13 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
14 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
15 | },
16 | "ansi-styles": {
17 | "version": "2.2.1",
18 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
19 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
20 | },
21 | "chalk": {
22 | "version": "1.1.3",
23 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
24 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg="
25 | },
26 | "cli-cursor": {
27 | "version": "2.1.0",
28 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
29 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU="
30 | },
31 | "cli-spinners": {
32 | "version": "1.0.0",
33 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.0.0.tgz",
34 | "integrity": "sha1-75h+09SDkaw9q5GAtAanQhgNbmo="
35 | },
36 | "cli-width": {
37 | "version": "2.1.0",
38 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
39 | "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao="
40 | },
41 | "cross-spawn": {
42 | "version": "5.1.0",
43 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
44 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk="
45 | },
46 | "escape-string-regexp": {
47 | "version": "1.0.5",
48 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
49 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
50 | },
51 | "execa": {
52 | "version": "0.7.0",
53 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
54 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c="
55 | },
56 | "external-editor": {
57 | "version": "2.0.4",
58 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz",
59 | "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI="
60 | },
61 | "figures": {
62 | "version": "2.0.0",
63 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
64 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI="
65 | },
66 | "fuse.js": {
67 | "version": "3.0.5",
68 | "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.0.5.tgz",
69 | "integrity": "sha1-tY2Fh4gCMh3pRGFlSUe5OvEIZyc="
70 | },
71 | "get-stream": {
72 | "version": "3.0.0",
73 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
74 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
75 | },
76 | "has-ansi": {
77 | "version": "2.0.0",
78 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
79 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE="
80 | },
81 | "iconv-lite": {
82 | "version": "0.4.17",
83 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz",
84 | "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0="
85 | },
86 | "inherits": {
87 | "version": "2.0.1",
88 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
89 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
90 | },
91 | "inquirer": {
92 | "version": "3.0.6",
93 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
94 | "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c="
95 | },
96 | "inquirer-autocomplete-prompt": {
97 | "version": "0.11.0",
98 | "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-0.11.0.tgz",
99 | "integrity": "sha512-SKDLkj/pzzU9B/EIuQvregPj6+qMrFAYaudRkU+sL6Dz1wEtxv1FdAv9A966OfpbE9E05VwxsivRIm529+z7Gg==",
100 | "dependencies": {
101 | "ansi-escapes": {
102 | "version": "2.0.0",
103 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
104 | "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs="
105 | },
106 | "inquirer": {
107 | "version": "3.1.1",
108 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.1.1.tgz",
109 | "integrity": "sha512-H50sHQwgvvaTBd3HpKMVtL/u6LoHDvYym51gd7bGQe/+9HkCE+J0/3N5FJLfd6O6oz44hHewC2Pc2LodzWVafQ=="
110 | }
111 | }
112 | },
113 | "is-fullwidth-code-point": {
114 | "version": "2.0.0",
115 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
116 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
117 | },
118 | "is-promise": {
119 | "version": "2.1.0",
120 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
121 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
122 | },
123 | "is-stream": {
124 | "version": "1.1.0",
125 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
126 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
127 | },
128 | "isexe": {
129 | "version": "2.0.0",
130 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
131 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
132 | },
133 | "jschardet": {
134 | "version": "1.4.2",
135 | "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.4.2.tgz",
136 | "integrity": "sha1-KqEH8UKvQSHRRWWdRPUIMJYeaZo="
137 | },
138 | "lodash": {
139 | "version": "4.17.4",
140 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
141 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
142 | },
143 | "lodash.uniq": {
144 | "version": "4.5.0",
145 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
146 | "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
147 | },
148 | "log-symbols": {
149 | "version": "1.0.2",
150 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
151 | "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg="
152 | },
153 | "lru-cache": {
154 | "version": "4.0.2",
155 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
156 | "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4="
157 | },
158 | "mimic-fn": {
159 | "version": "1.1.0",
160 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
161 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg="
162 | },
163 | "mute-stream": {
164 | "version": "0.0.7",
165 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
166 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
167 | },
168 | "npm-run-path": {
169 | "version": "2.0.2",
170 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
171 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8="
172 | },
173 | "onetime": {
174 | "version": "2.0.1",
175 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
176 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ="
177 | },
178 | "ora": {
179 | "version": "1.2.0",
180 | "resolved": "https://registry.npmjs.org/ora/-/ora-1.2.0.tgz",
181 | "integrity": "sha1-Mvsxg1AO/oP16okQF4Xw7mBg/sk="
182 | },
183 | "os-tmpdir": {
184 | "version": "1.0.2",
185 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
186 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
187 | },
188 | "p-finally": {
189 | "version": "1.0.0",
190 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
191 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
192 | },
193 | "path-key": {
194 | "version": "2.0.1",
195 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
196 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
197 | },
198 | "pseudomap": {
199 | "version": "1.0.2",
200 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
201 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
202 | },
203 | "restore-cursor": {
204 | "version": "2.0.0",
205 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
206 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368="
207 | },
208 | "run-async": {
209 | "version": "2.3.0",
210 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
211 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA="
212 | },
213 | "rx": {
214 | "version": "4.1.0",
215 | "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
216 | "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
217 | },
218 | "rx-lite": {
219 | "version": "4.0.8",
220 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
221 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
222 | },
223 | "rx-lite-aggregates": {
224 | "version": "4.0.8",
225 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
226 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74="
227 | },
228 | "shebang-command": {
229 | "version": "1.2.0",
230 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
231 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo="
232 | },
233 | "shebang-regex": {
234 | "version": "1.0.0",
235 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
236 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
237 | },
238 | "shell-history": {
239 | "version": "1.1.0",
240 | "resolved": "https://registry.npmjs.org/shell-history/-/shell-history-1.1.0.tgz",
241 | "integrity": "sha1-mwFWbRjy3pCKVLnaChcdyzqQ0pw="
242 | },
243 | "signal-exit": {
244 | "version": "3.0.2",
245 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
246 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
247 | },
248 | "string-width": {
249 | "version": "2.0.0",
250 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz",
251 | "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4="
252 | },
253 | "strip-ansi": {
254 | "version": "3.0.1",
255 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
256 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
257 | },
258 | "strip-eof": {
259 | "version": "1.0.0",
260 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
261 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
262 | },
263 | "supports-color": {
264 | "version": "2.0.0",
265 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
266 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
267 | },
268 | "through": {
269 | "version": "2.3.8",
270 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
271 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
272 | },
273 | "tmp": {
274 | "version": "0.0.31",
275 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
276 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc="
277 | },
278 | "util": {
279 | "version": "0.10.3",
280 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
281 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk="
282 | },
283 | "which": {
284 | "version": "1.2.14",
285 | "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
286 | "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU="
287 | },
288 | "yallist": {
289 | "version": "2.1.2",
290 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
291 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
292 | }
293 | }
294 | }
295 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "historie",
3 | "version": "1.0.1",
4 | "description": "A searchable history cli",
5 | "homepage": "https://github.com/siddharthkp/historie#readme",
6 | "main": "index.js",
7 | "bin": "index.js",
8 | "scripts": {
9 | "start": "node index"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/siddharthkp/historie.git"
14 | },
15 | "files": [
16 | "index.js",
17 | "history.js",
18 | "exec.js"
19 | ],
20 | "keywords": [
21 | "history",
22 | "cli",
23 | "historie",
24 | "autosuggest",
25 | "search"
26 | ],
27 | "author": "siddharthkp",
28 | "license": "MIT",
29 | "dependencies": {
30 | "execa": "0.7.0",
31 | "fuse.js": "3.0.5",
32 | "inquirer": "3.0.6",
33 | "inquirer-autocomplete-prompt": "0.11.0",
34 | "lodash.uniq": "4.5.0",
35 | "ora": "1.2.0",
36 | "shell-history": "1.1.0"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/screenshot.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/siddharthkp/historie/3c2d755501dc93e69db1b0ad91ebe6c59ad2cdb8/screenshot.gif
--------------------------------------------------------------------------------