booker 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/web +0 -11
- data/lib/booker.rb +141 -35
- data/lib/bookmarks.rb +57 -59
- data/lib/config.rb +104 -0
- data/lib/consts.rb +101 -0
- metadata +45 -12
- data/lib/browser.rb +0 -55
- data/lib/folder.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12ce5c6cd017aa992b6dd70db7b7cf2f71731789
|
4
|
+
data.tar.gz: a14a6a224145a45ef3b1df81ec657560aee47f5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8855af77d02586e4ff62f1643c41b8ddcab97107e01fc22fb7c1d4bab5ec837493c3a26f0a591313d5611930457623a3ce39beab8ba4f305e8ca735b613b9998
|
7
|
+
data.tar.gz: 56ebded687f7e7f757e048a363e787f99fbb6454c41416e4b306ed4f8e2b49e444e1d0c9e85bbc2a97119bfeb3060852985b6f47363f5716c29f2ce0f0b5fe2c
|
data/bin/web
CHANGED
@@ -9,15 +9,4 @@ require_relative "../lib/booker"
|
|
9
9
|
# also show and/or open up google chrome bookmarks
|
10
10
|
|
11
11
|
|
12
|
-
VERSION = "0.1"
|
13
|
-
HELP_BANNER = <<-EOS
|
14
|
-
Open browser:
|
15
|
-
$ web [options]
|
16
|
-
Options:
|
17
|
-
--bookmark, -b: explicity open bookmark
|
18
|
-
--search, -s: explicity open search
|
19
|
-
--complete: show completions
|
20
|
-
EOS
|
21
|
-
|
22
|
-
|
23
12
|
Booker.new(ARGV)
|
data/lib/booker.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
-
# parse command line args
|
1
|
+
# parse web's command line args
|
2
2
|
|
3
3
|
|
4
|
+
VERSION = "0.2"
|
5
|
+
|
6
|
+
|
7
|
+
require 'yaml'
|
8
|
+
require 'json'
|
4
9
|
require_relative 'bookmarks'
|
5
|
-
require_relative '
|
10
|
+
require_relative 'config'
|
11
|
+
require_relative 'consts'
|
6
12
|
|
7
13
|
|
8
14
|
# get web opening command
|
@@ -12,41 +18,21 @@ class Booker
|
|
12
18
|
parse args
|
13
19
|
end
|
14
20
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
exit 1
|
19
|
-
end
|
20
|
-
|
21
|
-
# doing autocompletion
|
22
|
-
if args[0] == "--complete"
|
23
|
-
args.shift # remove flag
|
24
|
-
allargs = args.join(' ')
|
25
|
-
bm = Bookmarks.new(allargs)
|
26
|
-
bm.autocomplete
|
27
|
-
exit 0
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
# doing forced bookmarking
|
32
|
-
if args[0] == "--bookmark" or args[0] == "-b"
|
33
|
-
bm = Bookmarks.new('')
|
34
|
-
bookmark = bm.bookmark_id(args[1])
|
35
|
-
url = bm.bookmark_url(bookmark)
|
36
|
-
puts 'opening ' + url + '...'
|
37
|
-
exec browse << wrap(url)
|
38
|
-
exit 0
|
39
|
-
end
|
21
|
+
def helper
|
22
|
+
pexit HELP_BANNER, 1
|
23
|
+
end
|
40
24
|
|
25
|
+
def pexit(msg, sig)
|
26
|
+
puts msg
|
27
|
+
exit sig
|
28
|
+
end
|
41
29
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
puts 'searching ' + allargs + '...'
|
46
|
-
exec browse << search << allargs
|
47
|
-
exit 0
|
48
|
-
end
|
30
|
+
def parse(args)
|
31
|
+
# no args given, show help
|
32
|
+
helper if args.none?
|
49
33
|
|
34
|
+
# if arg starts with hyphen, parse option
|
35
|
+
parse_opt args if /^-.*/.match(args[0])
|
50
36
|
|
51
37
|
# interpret
|
52
38
|
while args do
|
@@ -66,10 +52,130 @@ class Booker
|
|
66
52
|
|
67
53
|
else # just search for these arguments
|
68
54
|
puts 'searching ' + allargs + '...'
|
55
|
+
search = BConfig.new.searcher
|
69
56
|
exec browse << search << allargs
|
70
57
|
|
71
58
|
end
|
72
59
|
end
|
73
60
|
end
|
74
|
-
end
|
75
61
|
|
62
|
+
def parse_opt(args)
|
63
|
+
valid_opts = %w{--version -v --install -i --help -h
|
64
|
+
--complete -c --bookmark -b --search -s}
|
65
|
+
|
66
|
+
nextarg = args[0]
|
67
|
+
errormsg = "Error: ".red + "unrecognized option #{nextarg}"
|
68
|
+
pexit errormsg, 1 if ! (valid_opts.include? nextarg)
|
69
|
+
|
70
|
+
# doing forced bookmarking
|
71
|
+
if args[0] == "--bookmark" or args[0] == "-b"
|
72
|
+
bm = Bookmarks.new('')
|
73
|
+
id = args[1]
|
74
|
+
if id
|
75
|
+
url = bm.bookmark_url(id)
|
76
|
+
puts 'opening ' + url + '...'
|
77
|
+
exec browse << wrap(url)
|
78
|
+
exit 0
|
79
|
+
else
|
80
|
+
pexit ' Error: '.red +
|
81
|
+
'web --bookmark expects bookmark id', 1
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# doing autocompletion
|
86
|
+
if args[0] == "--complete" or args[0] == "-c"
|
87
|
+
args.shift # remove flag
|
88
|
+
allargs = args.join(' ')
|
89
|
+
bm = Bookmarks.new(allargs)
|
90
|
+
bm.autocomplete
|
91
|
+
exit 0
|
92
|
+
end
|
93
|
+
|
94
|
+
# doing installation
|
95
|
+
if args[0] == "--install" or args[0] == "-i"
|
96
|
+
args.shift # remove flag
|
97
|
+
if args.length > 0
|
98
|
+
install(args)
|
99
|
+
else
|
100
|
+
pexit ' Error: '.red +
|
101
|
+
"web --install expects arguments: [completion, bookmarks, config]", 1
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# needs some help
|
106
|
+
if args[0] == "--help" or args[0] == "-h"
|
107
|
+
helper
|
108
|
+
end
|
109
|
+
|
110
|
+
# doing forced searching
|
111
|
+
if args[0] == "--search" or args[0] == "-s"
|
112
|
+
args.shift # remove flag
|
113
|
+
allargs = args.join(' ')
|
114
|
+
if allargs == ""
|
115
|
+
pexit "--search requires an argument", 1
|
116
|
+
else
|
117
|
+
puts 'searching ' + allargs + '...'
|
118
|
+
search = BConfig.new.searcher
|
119
|
+
exec browse << search << allargs
|
120
|
+
exit 0
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# print version information
|
125
|
+
if args[0] == "--version" or args[0] == "-v"
|
126
|
+
pexit VERSION, 0
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def install(args)
|
131
|
+
target = args.shift
|
132
|
+
exit 0 if target.nil?
|
133
|
+
|
134
|
+
if /comp/i.match(target) # completion installation
|
135
|
+
begin
|
136
|
+
# determine where to install function
|
137
|
+
fpath = `zsh -c 'echo $fpath'`.split(' ')[0]
|
138
|
+
File.open(fpath + "/_web", 'w') {|f| f.write(COMPLETION) }
|
139
|
+
loaded = `zsh -c 'autoload -U _web'`
|
140
|
+
puts "Success: ".grn +
|
141
|
+
"installed zsh autocompletion in #{fpath}"
|
142
|
+
rescue
|
143
|
+
pexit "Failure: ".red +
|
144
|
+
"could not write ZSH completion _web script to $fpath", 1
|
145
|
+
end
|
146
|
+
|
147
|
+
elsif /bookmark/i.match(target) # bookmarks installation
|
148
|
+
# locate bookmarks file, show user, write to config?
|
149
|
+
puts 'searching for chrome bookmarks...(takes time)'
|
150
|
+
begin
|
151
|
+
bms = `find ~ -iname '*bookmarks' | grep -i chrom`.split("\n")
|
152
|
+
puts 'select your bookmarks file: '
|
153
|
+
bms.each_with_index{|bm, i| puts i.to_s.grn + " - " + bm }
|
154
|
+
selected = bms[gets.chomp.to_i]
|
155
|
+
puts 'Selected: '.yel + selected
|
156
|
+
BConfig.new.write('bookmarks', selected)
|
157
|
+
puts "Success: ".grn +
|
158
|
+
"config file updated with your bookmarks"
|
159
|
+
rescue
|
160
|
+
puts "Failure: ".red +
|
161
|
+
"could not add bookmarks to config file ~/.booker"
|
162
|
+
end
|
163
|
+
|
164
|
+
elsif /config/i.match(target) # default config file generation
|
165
|
+
begin
|
166
|
+
BConfig.new.write
|
167
|
+
puts "Success: ".grn +
|
168
|
+
"config file written to ~/.booker"
|
169
|
+
rescue
|
170
|
+
puts "Failure: ".red +
|
171
|
+
"could not write config file ~/.booker"
|
172
|
+
end
|
173
|
+
|
174
|
+
else # unknown argument passed into install
|
175
|
+
pexit "Failure: ".red +
|
176
|
+
"unknown installation option (#{target})", 1
|
177
|
+
end
|
178
|
+
|
179
|
+
install(args) # recurse til done
|
180
|
+
end
|
181
|
+
end
|
data/lib/bookmarks.rb
CHANGED
@@ -1,22 +1,11 @@
|
|
1
|
-
# grab bookmarks from json file on computer
|
2
|
-
# on operating system as well
|
1
|
+
# grab/parse bookmarks from json file on computer
|
3
2
|
|
4
3
|
|
5
|
-
|
6
|
-
require "json"
|
7
|
-
require_relative "folder"
|
4
|
+
TERMWIDTH = 80
|
8
5
|
|
9
6
|
|
10
|
-
# get the width of the current terminal # [columns, lines]
|
11
|
-
#require "highline"
|
12
|
-
#COLWIDTH = HighLine::SystemExtensions.terminal_size[0]
|
13
|
-
|
14
7
|
# thx danhassin
|
15
8
|
class String
|
16
|
-
def colorize(color, mod)
|
17
|
-
"\033[#{mod};#{color};49m#{self}\033[0;0m"
|
18
|
-
end
|
19
|
-
|
20
9
|
def window(width)
|
21
10
|
if self.length >= width
|
22
11
|
self[0..width-1]
|
@@ -25,67 +14,73 @@ class String
|
|
25
14
|
end
|
26
15
|
end
|
27
16
|
|
17
|
+
def colorize(color, mod)
|
18
|
+
"\033[#{mod};#{color};49m#{self}\033[0;0m"
|
19
|
+
end
|
20
|
+
|
28
21
|
def reset() colorize(0,0) end
|
29
|
-
def
|
30
|
-
def
|
31
|
-
def
|
22
|
+
def blu() colorize(34,0) end
|
23
|
+
def yel() colorize(33,0) end
|
24
|
+
def grn() colorize(32,0) end
|
25
|
+
def red() colorize(31,0) end
|
32
26
|
end
|
33
27
|
|
34
28
|
|
35
29
|
class Bookmarks
|
36
|
-
|
37
|
-
RAW_JSON_BOOKMARKS = JSON.parse(open(ENV['HOME'] + LOCAL_BOOKMARKS).read)
|
38
|
-
CHROME_BOOKMARKS = RAW_JSON_BOOKMARKS['roots']['bookmark_bar']['children']
|
39
|
-
|
30
|
+
# try to read bookmarks
|
40
31
|
def initialize(search_term)
|
32
|
+
@conf = BConfig.new
|
33
|
+
begin
|
34
|
+
local_bookmarks = JSON.parse(open(@conf.bookmarks).read)
|
35
|
+
@chrome_bookmarks = local_bookmarks['roots']['bookmark_bar']['children']
|
36
|
+
rescue
|
37
|
+
puts "Warning: ".yel +
|
38
|
+
"Chrome JSON Bookmarks not found."
|
39
|
+
puts "Suggest: ".grn +
|
40
|
+
"web --install bookmarks"
|
41
|
+
@chrome_bookmarks = {}
|
42
|
+
end
|
43
|
+
|
44
|
+
# clean search term, set urls
|
41
45
|
@searching = /#{search_term}/i
|
42
46
|
@allurls = []
|
43
47
|
parse
|
44
48
|
end
|
45
49
|
|
50
|
+
|
46
51
|
# output for zsh
|
47
52
|
def autocomplete
|
48
|
-
width = 80
|
49
53
|
@allurls.each do |url|
|
50
54
|
# delete anything not allowed in linktitle
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
name = dirty_t.window(width)
|
55
|
+
name = url.folder + url.title.gsub(/[^a-z0-9\-\/_]/i, '')
|
56
|
+
name.gsub!(/\-+/, '-')
|
57
|
+
name.gsub!(/ /,'')
|
58
|
+
name = name.window(TERMWIDTH)
|
56
59
|
|
57
60
|
# remove strange things from any linkurls
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
#link = dirty_u[0..right-1]
|
63
|
-
link = dirty_u[0..width]
|
61
|
+
link = url.url.gsub(/[,'"&?].*/, '')
|
62
|
+
link.gsub!(/.*:\/+/,'')
|
63
|
+
link.gsub!(/ /,'')
|
64
|
+
link = link[0..TERMWIDTH]
|
64
65
|
|
65
66
|
# print out title and cleaned url, for autocompetion
|
66
67
|
puts url.id + ":" + name + ":" + link
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
70
|
-
|
71
|
-
# parse a bookmark's id from tab completed form
|
72
|
-
def bookmark_id(url)
|
73
|
-
url[0..5].gsub(/[^0-9]/, '')
|
74
|
-
end
|
75
|
-
|
76
71
|
# get link (from id number)
|
77
72
|
def bookmark_url(id)
|
78
|
-
bm_url = ''
|
79
73
|
@allurls.each do |url|
|
80
|
-
|
74
|
+
if id == url.id
|
75
|
+
return url.url
|
76
|
+
end
|
81
77
|
end
|
82
|
-
bm_url
|
83
78
|
end
|
84
79
|
|
85
80
|
# recursively parse gc bookmarks
|
86
81
|
def parse(root=nil)
|
87
82
|
# root - parent folder in ruby
|
88
|
-
root = Folder.new
|
83
|
+
root = Folder.new @chrome_bookmarks if root.nil?
|
89
84
|
|
90
85
|
# all current urls, to hash
|
91
86
|
root.json.each {|x| parse_link root.title, x }
|
@@ -112,11 +107,25 @@ class Bookmarks
|
|
112
107
|
parse(subdir)
|
113
108
|
end
|
114
109
|
end
|
110
|
+
end # close bookmarks class
|
111
|
+
|
112
|
+
|
113
|
+
# for recursively parsing bookmarks
|
114
|
+
class Folder
|
115
|
+
include Enumerable
|
116
|
+
def initialize(title='/', json)
|
117
|
+
@title = title.gsub(/[: ,'"]/, '-').downcase
|
118
|
+
@json = json
|
119
|
+
end
|
120
|
+
|
121
|
+
def json() @json end
|
122
|
+
def title() @title end
|
123
|
+
def each() @json.each end
|
115
124
|
end
|
116
125
|
|
117
|
-
|
126
|
+
|
127
|
+
# clean bookmark title, set attrs
|
118
128
|
class Bookmark
|
119
|
-
# clean bookmark title, set attrs
|
120
129
|
def initialize(f, t, u, id)
|
121
130
|
@title = t.gsub(/[: ,'"+\-]/, '_').downcase
|
122
131
|
@folder = f
|
@@ -124,19 +133,8 @@ class Bookmark
|
|
124
133
|
@id = id
|
125
134
|
end
|
126
135
|
|
127
|
-
def folder
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
def title
|
132
|
-
@title
|
133
|
-
end
|
134
|
-
|
135
|
-
def id
|
136
|
-
@id
|
137
|
-
end
|
138
|
-
|
139
|
-
def url
|
140
|
-
@url
|
141
|
-
end
|
136
|
+
def folder() @folder end
|
137
|
+
def title() @title end
|
138
|
+
def url() @url end
|
139
|
+
def id() @id end
|
142
140
|
end
|
data/lib/config.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
# configuation - get where bookmarks are
|
2
|
+
|
3
|
+
|
4
|
+
# detect operating system
|
5
|
+
module OS
|
6
|
+
def OS.windows?
|
7
|
+
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def OS.mac?
|
11
|
+
(/darwin/ =~ RUBY_PLATFORM) != nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def OS.linux?
|
15
|
+
not (OS.windows? or OS.mac?)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
# return browser (chrome) opening command
|
21
|
+
module Browser
|
22
|
+
extend OS
|
23
|
+
def browse
|
24
|
+
if OS.windows?
|
25
|
+
'/cygdrive/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe '
|
26
|
+
elsif OS.mac?
|
27
|
+
'open -a "Google Chrome" '
|
28
|
+
elsif OS.linux?
|
29
|
+
'xdg-open ' # completely guessing here
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def domain
|
34
|
+
/.*(io|com|web|net|org|gov|edu)$/i
|
35
|
+
end
|
36
|
+
|
37
|
+
# helper methods
|
38
|
+
def prep(url)
|
39
|
+
if /^http/.match(url)
|
40
|
+
url
|
41
|
+
else
|
42
|
+
'http://' << url
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def wrap(url)
|
47
|
+
"'" + url + "'"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# high level configuration
|
53
|
+
class BConfig
|
54
|
+
YAMLCONF = ENV['HOME'] + '/.booker.yml'
|
55
|
+
|
56
|
+
def initialize
|
57
|
+
# config defaults (for osx, default chrome profile)
|
58
|
+
@config = {
|
59
|
+
:searcher => "https://duckduckgo.com/?q=",
|
60
|
+
:bookmarks => ENV['HOME'] +
|
61
|
+
"/Library/Application Support/Google/Chrome/Profile 1/Bookmarks",
|
62
|
+
}
|
63
|
+
|
64
|
+
# configure through users yaml config file
|
65
|
+
@config = read(YAMLCONF)
|
66
|
+
|
67
|
+
valid = @config.keys
|
68
|
+
@config.each do |k,v|
|
69
|
+
@config[k.to_sym] = v if valid.include? k.to_sym
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def read(file)
|
74
|
+
begin
|
75
|
+
@config = YAML::load(IO.read(file))
|
76
|
+
rescue Errno::ENOENT
|
77
|
+
puts "Warning: ".yel +
|
78
|
+
"YAML configuration file couldn't be found. Using defaults."
|
79
|
+
puts "Suggest: ".grn +
|
80
|
+
"web --install config"
|
81
|
+
rescue Psych::SyntaxError
|
82
|
+
puts "Warning: ".red +
|
83
|
+
"YAML configuration file contains invalid syntax. Using defaults."
|
84
|
+
end
|
85
|
+
@config
|
86
|
+
end
|
87
|
+
|
88
|
+
def write(k=nil, v=nil)
|
89
|
+
if k.nil? or v.nil?
|
90
|
+
File.open(YAMLCONF, 'w') {|f| f.write(@config.to_yaml) }
|
91
|
+
else
|
92
|
+
@config[k] = v
|
93
|
+
File.open(YAMLCONF, 'w+') {|f| f.write(@config.to_yaml) }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def bookmarks
|
98
|
+
@config['bookmarks']
|
99
|
+
end
|
100
|
+
|
101
|
+
def searcher
|
102
|
+
@config['searcher']
|
103
|
+
end
|
104
|
+
end
|
data/lib/consts.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
# file for large constant strings
|
2
|
+
|
3
|
+
|
4
|
+
HELP_BANNER = <<-EOS
|
5
|
+
Open browser:
|
6
|
+
$ web [option] [arguments]
|
7
|
+
|
8
|
+
Main options:
|
9
|
+
--bookmark, -b: explicity open bookmark
|
10
|
+
--install, -i: install [bookmarks, completion, config]
|
11
|
+
--search, -s: explicity search arguments
|
12
|
+
|
13
|
+
Others:
|
14
|
+
--complete, -c: show tab completions
|
15
|
+
--version, -v: print version
|
16
|
+
--help, -h: show help
|
17
|
+
EOS
|
18
|
+
|
19
|
+
|
20
|
+
DEF_CONFIG = <<-EOS
|
21
|
+
bookmarks: null
|
22
|
+
searcher: https://duckduckgo.com/?q=
|
23
|
+
EOS
|
24
|
+
|
25
|
+
|
26
|
+
COMPLETION = <<-EOS
|
27
|
+
#compdef web
|
28
|
+
#autoload
|
29
|
+
|
30
|
+
|
31
|
+
_web_bookmarks() {
|
32
|
+
#http://zsh.sourceforge.net/Guide/zshguide06.html#l147
|
33
|
+
setopt glob bareglobqual nullglob rcexpandparam extendedglob automenu
|
34
|
+
unsetopt allexport aliases errexit octalzeroes ksharrays cshnullglob
|
35
|
+
|
36
|
+
#get chrome bookmarks
|
37
|
+
local -a bookmarks sites search
|
38
|
+
|
39
|
+
#grab all CLI args, remove 'web' from start
|
40
|
+
search=`echo $@ | sed -e '/^web /d'`
|
41
|
+
sites=`web --complete $search`
|
42
|
+
bookmarks=("${(f)${sites}}")
|
43
|
+
|
44
|
+
#terminal colors
|
45
|
+
BLUE=`echo -e "\033[4;34m"`
|
46
|
+
RESET=`echo -e "\033[0;0m"`
|
47
|
+
|
48
|
+
#parse parts, color
|
49
|
+
local -a ids links
|
50
|
+
for bookmark in ${bookmarks[@]}; do
|
51
|
+
local -a split
|
52
|
+
split=("${(@s/:/)bookmark}")
|
53
|
+
ids+=( $split[1] )
|
54
|
+
links+=("$split[2] $BLUE$split[3]$RESET")
|
55
|
+
done
|
56
|
+
|
57
|
+
#finally, add completions
|
58
|
+
compstate[insert]=menu
|
59
|
+
compadd -U -l -X 'found chrome bookmarks:' -d links -a ids
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
_web() {
|
64
|
+
compstate[insert]=menu
|
65
|
+
local curcontext state line
|
66
|
+
typeset -A opt_args
|
67
|
+
_arguments\
|
68
|
+
'(-b)-b[do bookmark completion]'\
|
69
|
+
'(--bookmark)--bookmark[do bookmark completion]'\
|
70
|
+
'(-c)-c[show bookmark completions]'\
|
71
|
+
'(--complete)--complete[show bookmark completions]'\
|
72
|
+
'(-i)-i[perform installations (bookmarks, completion, config)]'\
|
73
|
+
'(--install)--install[perform installations (bookmarks, completion, config)]'\
|
74
|
+
'(-s)-s[search google for...]'\
|
75
|
+
'(--search)--search[search google for...]'\
|
76
|
+
'(-h)-h[show web help]'\
|
77
|
+
'(--help)--help[show web help]'\
|
78
|
+
'(-v)-v[show version]'\
|
79
|
+
'(--version)--version[show version]'\
|
80
|
+
'*::bookmarks:->bookmarks' && return 0
|
81
|
+
|
82
|
+
_web_bookmarks $words
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
_web
|
87
|
+
EOS
|
88
|
+
|
89
|
+
|
90
|
+
ZSH_SCRIPT = <<-EOS
|
91
|
+
# load zsh web completions
|
92
|
+
install_loc=~/.oh-my-zsh/completions
|
93
|
+
script=_web
|
94
|
+
|
95
|
+
install:
|
96
|
+
mkdir -vp $(install_loc)
|
97
|
+
cp -v $(script) $(install_loc)/
|
98
|
+
|
99
|
+
uninstall:
|
100
|
+
rm -v $(install_loc)/$(script)
|
101
|
+
EOS
|
metadata
CHANGED
@@ -1,32 +1,62 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: booker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Warner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.8'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.8.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.8'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.8.1
|
13
33
|
- !ruby/object:Gem::Dependency
|
14
34
|
name: rspec
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
16
36
|
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '3.3'
|
17
40
|
- - ">="
|
18
41
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
42
|
+
version: 3.3.2
|
20
43
|
type: :development
|
21
44
|
prerelease: false
|
22
45
|
version_requirements: !ruby/object:Gem::Requirement
|
23
46
|
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.3'
|
24
50
|
- - ">="
|
25
51
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
-
description:
|
28
|
-
|
29
|
-
|
52
|
+
version: 3.3.2
|
53
|
+
description: |2
|
54
|
+
Select your bookmarks from the command line, by their bookmark id number.
|
55
|
+
ZSH users will be able to tab complete through their matches, similar to
|
56
|
+
how the autocompletion for `kill` works. If no bookmark is provided, web
|
57
|
+
will check if the argument is a website and visit it, or search duckduckgo
|
58
|
+
for the string argument.
|
59
|
+
email: jeremywrnr@gmail.com
|
30
60
|
executables:
|
31
61
|
- web
|
32
62
|
extensions: []
|
@@ -35,13 +65,16 @@ files:
|
|
35
65
|
- bin/web
|
36
66
|
- lib/booker.rb
|
37
67
|
- lib/bookmarks.rb
|
38
|
-
- lib/
|
39
|
-
- lib/
|
40
|
-
homepage: http://
|
68
|
+
- lib/config.rb
|
69
|
+
- lib/consts.rb
|
70
|
+
homepage: http://github.com/jeremywrnr/booker
|
41
71
|
licenses:
|
42
72
|
- MIT
|
43
73
|
metadata: {}
|
44
|
-
post_install_message:
|
74
|
+
post_install_message: |2
|
75
|
+
Thank you for installing booker!
|
76
|
+
To set bookmarks location, run `web --install bookmarks`
|
77
|
+
To add zsh completion, run `web --install completion`
|
45
78
|
rdoc_options: []
|
46
79
|
require_paths:
|
47
80
|
- lib
|
@@ -60,5 +93,5 @@ rubyforge_project:
|
|
60
93
|
rubygems_version: 2.4.8
|
61
94
|
signing_key:
|
62
95
|
specification_version: 4
|
63
|
-
summary: CLI parser for google chrome bookmarks
|
96
|
+
summary: CLI parser/selector for google chrome bookmarks
|
64
97
|
test_files: []
|
data/lib/browser.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# detect operating system
|
2
|
-
|
3
|
-
module OS
|
4
|
-
def OS.windows?
|
5
|
-
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
6
|
-
end
|
7
|
-
|
8
|
-
def OS.mac?
|
9
|
-
(/darwin/ =~ RUBY_PLATFORM) != nil
|
10
|
-
end
|
11
|
-
|
12
|
-
def OS.linux?
|
13
|
-
not (OS.windows? or OS.mac?)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
# return browser (chrome) opening command
|
19
|
-
|
20
|
-
module Browser
|
21
|
-
extend OS
|
22
|
-
def browse
|
23
|
-
if OS.windows?
|
24
|
-
'/cygdrive/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe '
|
25
|
-
elsif OS.mac?
|
26
|
-
'open -a "Google Chrome" '
|
27
|
-
elsif OS.linix?
|
28
|
-
'xdg-open ' # completely guessing here
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def domain
|
33
|
-
/.*(io|com|web|net|org|gov|edu)$/i
|
34
|
-
end
|
35
|
-
|
36
|
-
def search
|
37
|
-
#"https://www.google.com/search?q="
|
38
|
-
#"http://www.bing.com/search?q=" #lol
|
39
|
-
"https://duckduckgo.com/?q="
|
40
|
-
end
|
41
|
-
|
42
|
-
# helper methods
|
43
|
-
|
44
|
-
def prep(url)
|
45
|
-
if /^http/.match(url)
|
46
|
-
url
|
47
|
-
else
|
48
|
-
'http://' << url
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def wrap(url)
|
53
|
-
"'" + url + "'"
|
54
|
-
end
|
55
|
-
end
|
data/lib/folder.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# basic folder class, for parsing bookmarks
|
2
|
-
|
3
|
-
class Folder
|
4
|
-
include Enumerable
|
5
|
-
def initialize(title='/', json)
|
6
|
-
@title = title.gsub(/[: ,'"]/, '-').downcase
|
7
|
-
@json = json
|
8
|
-
end
|
9
|
-
|
10
|
-
def title
|
11
|
-
@title
|
12
|
-
end
|
13
|
-
|
14
|
-
def json
|
15
|
-
@json
|
16
|
-
end
|
17
|
-
|
18
|
-
def each
|
19
|
-
@json.each
|
20
|
-
end
|
21
|
-
end
|