xiki 0.5.0a → 0.5.1a
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.
- data/Gemfile +2 -0
- data/README.markdown +32 -23
- data/etc/command/xiki_command.rb +2 -8
- data/etc/www/index.rb +8 -0
- data/etc/www/web_server.rb +353 -0
- data/lib/launcher.rb +1 -3
- data/lib/menu.rb +1 -0
- data/lib/xiki.rb +1 -1
- data/menus/create.rb +17 -0
- data/menus/http.rb +19 -0
- data/menus/urls.menu +1 -0
- data/xiki.gemspec +1 -1
- metadata +8 -3
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -1,8 +1,29 @@
|
|
1
|
-
|
1
|
+
# Summary
|
2
2
|
This file tells how to install Xiki. See http://xiki.org for a description of Xiki.
|
3
3
|
|
4
|
+
Either install as a gem, or install from github.
|
4
5
|
|
5
|
-
|
6
|
+
# Install Xiki
|
7
|
+
|
8
|
+
## As a gem
|
9
|
+
|
10
|
+
$ gem install xiki
|
11
|
+
|
12
|
+
## From github
|
13
|
+
|
14
|
+
$ git clone git@github.com:trogdoro/xiki.git
|
15
|
+
$ cd xiki
|
16
|
+
$ bundle install --system
|
17
|
+
$ cp <xiki dir>/etc/command/xiki_wrapper /usr/local/bin/xiki
|
18
|
+
$ chmod 755 /usr/local/bin/xiki
|
19
|
+
|
20
|
+
# Verify the 'xiki' command works
|
21
|
+
|
22
|
+
$ xiki
|
23
|
+
|
24
|
+
# Configure Emacs to use Xiki
|
25
|
+
|
26
|
+
If you're going to use Xiki with Emacs, do these steps:
|
6
27
|
|
7
28
|
## Step 1: Download Emacs
|
8
29
|
|
@@ -18,9 +39,8 @@ __UPDATE DIRECTIONS TO SAY GEM INSTALL BY DEFAULT__
|
|
18
39
|
$ sudo apt-get install emacs
|
19
40
|
|
20
41
|
|
21
|
-
## Step 2:
|
42
|
+
## Step 2: Do extra EmacsRuby (el4r) steps
|
22
43
|
|
23
|
-
$ sudo gem install el4r
|
24
44
|
$ gem contents el4r | grep setup.rb # To see which dir to cd to in the next step
|
25
45
|
$ cd /Library/Ruby/Gems/1.8/gems/el4r-1.0.4/
|
26
46
|
$ ruby setup.rb
|
@@ -28,27 +48,16 @@ __UPDATE DIRECTIONS TO SAY GEM INSTALL BY DEFAULT__
|
|
28
48
|
$ ruby -S el4r-rctool -p
|
29
49
|
$ sudo ruby -S el4r-rctool -i
|
30
50
|
|
31
|
-
## Step 3:
|
32
|
-
|
33
|
-
- Click on the 'ZIP' button on http://github.com/trogdoro/xiki
|
34
|
-
- Option 2: Clone repo
|
35
|
-
- git clone git@github.com:trogdoro/xiki.git
|
36
|
-
|
37
|
-
|
38
|
-
## Step 4: Require Xiki in EmacsRuby's config
|
39
|
-
- Sample configuration
|
40
|
-
- ~/.el4r/init.rb
|
41
|
-
| $LOAD_PATH.unshift "/projects/xiki/lib"
|
42
|
-
| require 'xiki'
|
43
|
-
| Xiki.init
|
44
|
-
|
|
45
|
-
| KeyBindings.keys # Use default key bindings
|
46
|
-
| Styles.use_xiki_color_scheme # Use xiki's color scheme
|
51
|
+
## Step 3: Require Xiki in EmacsRuby's config
|
52
|
+
Sample configuration:
|
47
53
|
|
54
|
+
~/.el4r/init.rb:
|
55
|
+
$LOAD_PATH.unshift "/projects/xiki/lib"
|
56
|
+
require 'xiki'
|
57
|
+
Xiki.init
|
48
58
|
|
49
|
-
|
50
|
-
|
51
|
-
$ bundle install --system
|
59
|
+
KeyBindings.keys # Use default key bindings
|
60
|
+
Styles.use_xiki_color_scheme # Use xiki's color scheme
|
52
61
|
|
53
62
|
|
54
63
|
## Trouble-shooting
|
data/etc/command/xiki_command.rb
CHANGED
@@ -84,11 +84,7 @@ class XikiCommand
|
|
84
84
|
|
85
85
|
@@initial_request = path
|
86
86
|
xiki_process = "#{xiki_root}/etc/command/xiki_process.rb"
|
87
|
-
Daemons.run xiki_process, :ARGV=>['start'], :monitor=>false, :multiple=>false
|
88
|
-
# Daemons.run '../etc/command/xiki_process.rb', :ARGV=>['start'], :monitor=>false, :multiple=>false #, :app_name=>'xiki'
|
89
|
-
# Daemons.run 'etc/process/xiki_process.rb', :ARGV=>['start'], :monitor=>false, :multiple=>false #, :app_name=>'xiki'
|
90
|
-
# Daemons.run '../etc/process/xiki_process.rb', :ARGV=>['start'], :monitor=>false, :multiple=>false #, :app_name=>'xiki'
|
91
|
-
# Daemons.run 'xiki_daemon.rb', :ARGV=>['start'], :monitor=>false, :multiple=>false #, :app_name=>'xiki'
|
87
|
+
Daemons.run xiki_process, :ARGV=>['start'], :monitor=>false, :multiple=>false, :dir_mode=>:normal, :dir=>"/tmp/", :log_dir=>"/tmp/", :log_output=>true
|
92
88
|
|
93
89
|
# Aparently this line never gets reached
|
94
90
|
"- Started the process, I think."
|
@@ -99,8 +95,6 @@ class XikiCommand
|
|
99
95
|
|
100
96
|
rescue Exception=>e
|
101
97
|
puts "- service couldn't start!"
|
102
|
-
|
103
|
-
#rescue ... <Errno::EACCES: Permission denied - /projects/xiki/etc/command/xiki_process.rb.pid>!
|
104
98
|
end
|
105
99
|
end
|
106
100
|
|
@@ -177,7 +171,7 @@ class XikiCommand
|
|
177
171
|
require 'daemons'
|
178
172
|
xiki_root = File.expand_path "#{File.dirname(__FILE__)}/../.."
|
179
173
|
xiki_process = "#{xiki_root}/etc/command/xiki_process.rb"
|
180
|
-
Daemons.run
|
174
|
+
Daemons.run xiki_process, :ARGV=>[action], :dir_mode=>:normal, :dir=>"/tmp/", :log_dir=>"/tmp/", :log_output=>true
|
181
175
|
""
|
182
176
|
end
|
183
177
|
|
data/etc/www/index.rb
ADDED
@@ -0,0 +1,353 @@
|
|
1
|
+
class WebServer
|
2
|
+
|
3
|
+
def self.htmlify txt, options={}
|
4
|
+
|
5
|
+
return txt if ENV['HTTP_ACCEPT'] !~ /\Atext\/html/ # Only process if request wants html
|
6
|
+
|
7
|
+
# If starts with <foo or @bootstrap, just render it as html or bootstrap...
|
8
|
+
|
9
|
+
if txt =~ /\A<\w/
|
10
|
+
return txt
|
11
|
+
elsif txt =~ /\A@bootstrap\/\n /
|
12
|
+
|
13
|
+
xiki_dir = File.expand_path "#{File.dirname(__FILE__)}/../.."
|
14
|
+
|
15
|
+
$:.unshift "#{xiki_dir}/lib"
|
16
|
+
["lib/core_ext", "lib/line", "lib/tree", "menus/bootstrap"].each{|o| require "#{xiki_dir}/#{o}"}
|
17
|
+
|
18
|
+
txt.slice! /.+\n/
|
19
|
+
txt = txt.unindent
|
20
|
+
|
21
|
+
txt = Bootstrap.process txt
|
22
|
+
|
23
|
+
return txt
|
24
|
+
end
|
25
|
+
|
26
|
+
# Turn menu text into html...
|
27
|
+
|
28
|
+
# TODO: should probably maintain indenting?
|
29
|
+
txt.gsub! /^ *\| ?/, ''
|
30
|
+
|
31
|
+
txt.gsub! /^( *)[+-]+ /, "\\1" # Get rid of bullets
|
32
|
+
txt.gsub! /> (.+)/, "<h1>\\1</h1>"
|
33
|
+
|
34
|
+
path = ENV['REQUEST_URI']# =~ /\/$/ ? "" : "#{ENV['REQUEST_URI']}/" # Use relative links if path ends in slash, otherwise use absolute
|
35
|
+
path = "#{path}/" if path !~ /\/$/
|
36
|
+
|
37
|
+
txt.gsub!(/^( *)(.+?)(\/?)$/){
|
38
|
+
all = $&
|
39
|
+
indent, item, slash = $1, $2, $3
|
40
|
+
next all if all =~ /<h/ || all !~ /\/$/
|
41
|
+
my_path = path
|
42
|
+
my_path = "/" if item.slice!(/^<< /)
|
43
|
+
my_path = "/" if item.slice!(/^@ ?/)
|
44
|
+
"#{indent}<a href=\"#{my_path}#{item}\">#{item.gsub '_', ' '}</a>"
|
45
|
+
} # no slash
|
46
|
+
|
47
|
+
txt.gsub!(/^ +/){" " * $&.length} # Get rid of bullets
|
48
|
+
|
49
|
+
txt.gsub!(/.+/){
|
50
|
+
all = $&
|
51
|
+
next all if all =~ /<h/
|
52
|
+
next "<p class='info'>#{all}</p>" if all !~ /^<a/ # Don't end in "/" - just informational
|
53
|
+
all
|
54
|
+
}
|
55
|
+
txt.gsub! /^$/, "<p class='blank'> </p>"
|
56
|
+
|
57
|
+
print %`
|
58
|
+
<style>
|
59
|
+
a {
|
60
|
+
text-decoration: none;
|
61
|
+
}
|
62
|
+
|
63
|
+
.content a.selected {
|
64
|
+
background: -moz-linear-gradient(center top, #58b, #7ad) repeat scroll 0 0 transparent;
|
65
|
+
}
|
66
|
+
.content a {
|
67
|
+
color: #666;
|
68
|
+
display: block;
|
69
|
+
|
70
|
+
border-radius: 2px;
|
71
|
+
border: solid 1px;
|
72
|
+
border-color: #eee #ddd #bbb #ddd;
|
73
|
+
background: -moz-linear-gradient(center top, #fff, #f1f1f1) repeat scroll 0 0 transparent;
|
74
|
+
background: -webkit-gradient(linear,center bottom,center top,from(#f1f1f1),to(#fff));
|
75
|
+
display: block;
|
76
|
+
padding: 10px 16px;
|
77
|
+
text-shadow: 0 1px 0 #fff;
|
78
|
+
font-weight: bold;
|
79
|
+
}
|
80
|
+
a:hover {
|
81
|
+
background: -moz-linear-gradient(center top, #f8f8f8, #e1e1e1) repeat scroll 0 0 transparent;
|
82
|
+
background: -webkit-gradient(linear,center bottom,center top,from(#e1e1e1),to(#f8f8f8));
|
83
|
+
}
|
84
|
+
body {
|
85
|
+
font-family: arial;
|
86
|
+
margin: 50px;
|
87
|
+
font-size: 15px;
|
88
|
+
color: #666;
|
89
|
+
line-height: 21px;
|
90
|
+
background-color: #f8f8f8;
|
91
|
+
}
|
92
|
+
p {
|
93
|
+
margin: 0;
|
94
|
+
}
|
95
|
+
.blank {
|
96
|
+
line-height: 12px;
|
97
|
+
}
|
98
|
+
/* Or type some css here (to run in the browser) */
|
99
|
+
h1 {
|
100
|
+
color: #000;
|
101
|
+
font-family: arial;
|
102
|
+
font-size: 16px;
|
103
|
+
font-weight: bold;
|
104
|
+
margin: 11px 0 7px;
|
105
|
+
}
|
106
|
+
.save {
|
107
|
+
margin: 0 20px 10px 20px;
|
108
|
+
font-size: 15px;
|
109
|
+
}
|
110
|
+
form {
|
111
|
+
margin: 0;
|
112
|
+
}
|
113
|
+
textarea {
|
114
|
+
border: solid #ccc 1px;
|
115
|
+
margin: 2px 20px 13px 20px;
|
116
|
+
padding: 7px;
|
117
|
+
width: 80%;
|
118
|
+
font-size: 15px;
|
119
|
+
color: #555;
|
120
|
+
height: 150px;
|
121
|
+
line-height: 20px;
|
122
|
+
}
|
123
|
+
.toggle {
|
124
|
+
font-size: 13px;
|
125
|
+
margin: 15px 20px 0px 20px;
|
126
|
+
font-weight: bold;
|
127
|
+
}
|
128
|
+
.toggle a {
|
129
|
+
color: #aaa;
|
130
|
+
}
|
131
|
+
.info {
|
132
|
+
margin: 0 0 6px;
|
133
|
+
}
|
134
|
+
pre {
|
135
|
+
font-weight: bold;
|
136
|
+
}
|
137
|
+
|
138
|
+
</style>
|
139
|
+
`
|
140
|
+
|
141
|
+
puts %`<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>`
|
142
|
+
|
143
|
+
if ! options[:no_keys]
|
144
|
+
print %`
|
145
|
+
<script>
|
146
|
+
filter_pattern = "";
|
147
|
+
started_searching = false;
|
148
|
+
$(function(){
|
149
|
+
|
150
|
+
$(window).focus(function () {
|
151
|
+
filter_pattern = "";
|
152
|
+
|
153
|
+
$('body').css("opacity", 1.0);
|
154
|
+
$('p, h1, a').show();
|
155
|
+
$('a').removeClass("selected");
|
156
|
+
});
|
157
|
+
|
158
|
+
$('body').keypress(function(e){
|
159
|
+
if(e.ctrlKey || e.altKey || e.metaKey) return;
|
160
|
+
var char = e.which;
|
161
|
+
var letter = String.fromCharCode(char).toLowerCase();
|
162
|
+
//console.log(char)
|
163
|
+
if(char == 13){
|
164
|
+
$("a:visible:eq(0)").click();
|
165
|
+
e.stopPropagation();
|
166
|
+
return false;
|
167
|
+
}
|
168
|
+
|
169
|
+
if(letter == " "){
|
170
|
+
if(started_searching) filter_pattern = "";
|
171
|
+
else window.location = "/";
|
172
|
+
e.stopPropagation();
|
173
|
+
return false;
|
174
|
+
}
|
175
|
+
|
176
|
+
if(! letter.match(/[0-9a-z]/)) return true;
|
177
|
+
|
178
|
+
started_searching = true;
|
179
|
+
filter_pattern += letter;
|
180
|
+
|
181
|
+
//console.log(filter_pattern);
|
182
|
+
|
183
|
+
// If more than 100, don't use fade
|
184
|
+
var count = $('p, h1, a').filter(':visible').length;
|
185
|
+
var fade = count < 50;
|
186
|
+
|
187
|
+
$('p, h1, a').each(function(i, e){
|
188
|
+
e = $(e);
|
189
|
+
if(e.is(":hidden")) return;
|
190
|
+
var html = e.html().replace(/<.+?>/g, '');
|
191
|
+
//console.log(html);
|
192
|
+
if(html.toLowerCase().indexOf(filter_pattern) == -1)
|
193
|
+
fade ? e.slideUp(400) : e.hide();
|
194
|
+
// Get content
|
195
|
+
// Remove tags
|
196
|
+
// Hide if remaining doesn't match regex (/on/)
|
197
|
+
})
|
198
|
+
|
199
|
+
});
|
200
|
+
|
201
|
+
$('a').click(function(e){
|
202
|
+
var target = $(e.target);
|
203
|
+
target.toggleClass("selected");
|
204
|
+
|
205
|
+
$('body').animate({opacity: 0.0}, {easing: 'swing', duration: 150});
|
206
|
+
window.setTimeout(function(){ window.location = target.attr('href'); }, 150);
|
207
|
+
return false;
|
208
|
+
});
|
209
|
+
|
210
|
+
})
|
211
|
+
</script>
|
212
|
+
`
|
213
|
+
end
|
214
|
+
|
215
|
+
"<div class='content'>#{txt}</div>"
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
def self.usage
|
220
|
+
txt = "
|
221
|
+
> Summary
|
222
|
+
This url displays xiki menus, which come from simple files found in ~/menus/.
|
223
|
+
|
224
|
+
> Show all menus
|
225
|
+
all/
|
226
|
+
|
227
|
+
> Examples
|
228
|
+
ip/
|
229
|
+
animals/
|
230
|
+
sharks/
|
231
|
+
tables/
|
232
|
+
|
233
|
+
> Create menu
|
234
|
+
Just go to the url of a menu that doesn't exist yet:
|
235
|
+
unicorn/
|
236
|
+
|
237
|
+
> Docs
|
238
|
+
docs/
|
239
|
+
".sub("\n", '').gsub(/^ /, '')
|
240
|
+
|
241
|
+
print WebServer.htmlify txt
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
def self.index
|
246
|
+
|
247
|
+
no_keys = false
|
248
|
+
|
249
|
+
if ENV['REQUEST_METHOD'] == "POST"
|
250
|
+
cgi = CGI.new
|
251
|
+
post_txt = cgi['txt']
|
252
|
+
|
253
|
+
# Temporary hack
|
254
|
+
File.open("/tmp/post_tmp", "w") { |f| f << post_txt }
|
255
|
+
|
256
|
+
# What's a better way to do this?
|
257
|
+
# Pass in pipe, and send to shell command via STDIN
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
menu = ENV['QUERY_STRING']
|
262
|
+
|
263
|
+
return self.usage if menu == ""
|
264
|
+
|
265
|
+
# Run command...
|
266
|
+
|
267
|
+
command = "xiki #{menu}"
|
268
|
+
|
269
|
+
txt = `#{command}`
|
270
|
+
|
271
|
+
# rescue e=>Exception
|
272
|
+
# puts "<pre>#{e.message}\n#{e.backtrace}</pre>"
|
273
|
+
# Ol << "e: #{e.message}"
|
274
|
+
# Ol << "e: #{e.backtrace}"
|
275
|
+
# Ol << "If we get the permission problem, provide .notes file that will run command to run xiki command once (message explaining it first)!"
|
276
|
+
# end
|
277
|
+
|
278
|
+
# TODO: return different string when the service is down
|
279
|
+
|
280
|
+
# Ol << "Extract to new method: suggest_creating!!"
|
281
|
+
if txt.empty?
|
282
|
+
menu = menu.sub /\/$/, ''
|
283
|
+
|
284
|
+
no_keys = true
|
285
|
+
|
286
|
+
if menu =~ /\/./ # If slash that's not at end
|
287
|
+
puts "<pre>Nothing returned. Maybe service is down, or maybe menu\njust returned nothing, run xiki command\n\n $ xiki\n"
|
288
|
+
else
|
289
|
+
puts %`
|
290
|
+
<h1>Menu '#{menu}' doesn't exist yet. Create it?</h1>
|
291
|
+
|
292
|
+
<form action="/create/#{menu}" method="post" id="as_menu">
|
293
|
+
<div class='toggle'>
|
294
|
+
<span>as text</span>
|
295
|
+
| <a href="#" onclick="$('#as_class, #as_menu').toggle(); return false;">as class</a>
|
296
|
+
</div>
|
297
|
+
<textarea name="txt">
|
298
|
+
- Sample item/
|
299
|
+
- Another sample item/
|
300
|
+
- Yet another/
|
301
|
+
</textarea>
|
302
|
+
<br>
|
303
|
+
<input type="submit" value="save" class="save">
|
304
|
+
</form>
|
305
|
+
|
306
|
+
<form action="/create/#{menu}" method="post" id="as_class" style="display:none;">
|
307
|
+
<div class='toggle'>
|
308
|
+
<a href="#" onclick="$('#as_class, #as_menu').toggle(); return false;">as text</a>
|
309
|
+
| <span>as class</span>
|
310
|
+
</div>
|
311
|
+
<textarea name="txt">
|
312
|
+
class #{self.camel_case menu}
|
313
|
+
def self.menu *args
|
314
|
+
"Menu was called, with params \#{args.inspect}"
|
315
|
+
end
|
316
|
+
end
|
317
|
+
</textarea>
|
318
|
+
<br>
|
319
|
+
<input type="submit" value="save" class="save">
|
320
|
+
</form>
|
321
|
+
|
322
|
+
`.gsub(/^ /, '')
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
# Show this again when I figure out how to recognize server being down!
|
327
|
+
|
328
|
+
# if txt.empty?
|
329
|
+
# puts "<pre>Command received no output. Possibly the xiki process
|
330
|
+
# isn't running. Run the 'xiki' command in a shell:
|
331
|
+
|
332
|
+
# $ xiki
|
333
|
+
|
334
|
+
# </pre>".gsub(/^ /, '')
|
335
|
+
# end
|
336
|
+
|
337
|
+
# Html-ify and print output...
|
338
|
+
|
339
|
+
txt = self.htmlify txt, :no_keys=>no_keys
|
340
|
+
print txt
|
341
|
+
|
342
|
+
# print "<pre>#{ENV.keys.map{|k| "#{k}: #{ENV[k]}"}.join("\n")}</pre>"
|
343
|
+
|
344
|
+
rescue Exception=>e
|
345
|
+
puts "<pre>#{e.message}\n#{e.backtrace}</pre>"
|
346
|
+
end
|
347
|
+
|
348
|
+
def self.camel_case txt
|
349
|
+
return txt if txt !~ /_/ && txt =~ /[A-Z]+.*/
|
350
|
+
txt.split('_').map{|e| e.capitalize}.join
|
351
|
+
end
|
352
|
+
|
353
|
+
end
|
data/lib/launcher.rb
CHANGED
@@ -1183,11 +1183,9 @@ class Launcher
|
|
1183
1183
|
path.sub! /\/$/, ''
|
1184
1184
|
Console.run "rake #{path}", :dir=>dir
|
1185
1185
|
nil
|
1186
|
-
|
1187
1186
|
end
|
1188
1187
|
|
1189
1188
|
def self.reload_menu_dirs
|
1190
|
-
Ol.stack
|
1191
1189
|
MENU_DIRS.each do |dir|
|
1192
1190
|
next unless File.directory? dir
|
1193
1191
|
|
@@ -1318,7 +1316,7 @@ def require_menu file, options={}
|
|
1318
1316
|
raise "File Not Found" if !File.exists?(file)
|
1319
1317
|
end
|
1320
1318
|
|
1321
|
-
stem = file[
|
1319
|
+
stem = File.basename(file)[/\A(.*)\.[^.]+\z/, 1]
|
1322
1320
|
|
1323
1321
|
# As .menu...
|
1324
1322
|
|
data/lib/menu.rb
CHANGED
data/lib/xiki.rb
CHANGED
@@ -39,7 +39,7 @@ class Xiki
|
|
39
39
|
| Double-click on these lines to add the executable 'xiki' command to
|
40
40
|
| your path:
|
41
41
|
|
|
42
|
-
@$ cp
|
42
|
+
@$ cp #{Xiki.dir}etc/command/xiki_wrapper /usr/local/bin/xiki
|
43
43
|
@$ chmod 755 /usr/local/bin/xiki
|
44
44
|
|
|
45
45
|
| Then you can type 'xiki' on a command line outside of emacs as a
|
data/menus/create.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class Create
|
2
|
+
def self.menu name
|
3
|
+
|
4
|
+
txt = File.read "/tmp/post_tmp"
|
5
|
+
|
6
|
+
extension = txt =~ /^class / ? "rb" : "menu"
|
7
|
+
file_path = File.expand_path("~/menus/#{name}.#{extension}")
|
8
|
+
File.open(file_path, "w") { |f| f << txt }
|
9
|
+
|
10
|
+
require_menu file_path
|
11
|
+
|
12
|
+
"
|
13
|
+
> Your menu was saved! Now go to it:
|
14
|
+
- <a href='/#{name}'>#{name}</a>
|
15
|
+
"
|
16
|
+
end
|
17
|
+
end
|
data/menus/http.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
class Http
|
2
|
+
def self.menu *args
|
3
|
+
url = args.blank? ? nil : args.join('/')
|
4
|
+
|
5
|
+
# If as+open, just jump to the log
|
6
|
+
return View.open Launcher.log_file if Keys.open?
|
7
|
+
|
8
|
+
# If no url's, list them all
|
9
|
+
|
10
|
+
if url.blank?
|
11
|
+
txt = Launcher.last "http", :exclude_path=>1
|
12
|
+
txt.gsub! /^- /, '<< '
|
13
|
+
return txt
|
14
|
+
end
|
15
|
+
|
16
|
+
Keys.prefix == :u ? $el.browse_url(url) : Firefox.url(url)
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
data/menus/urls.menu
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<<< http/
|
data/xiki.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xiki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -1959472798
|
5
5
|
prerelease: 5
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
9
|
+
- 1
|
10
10
|
- a
|
11
|
-
version: 0.5.
|
11
|
+
version: 0.5.1a
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Craig Muth
|
@@ -110,6 +110,8 @@ files:
|
|
110
110
|
- etc/wrappers/wrapper.js
|
111
111
|
- etc/wrappers/wrapper.py
|
112
112
|
- etc/wrappers/wrapper.rb
|
113
|
+
- etc/www/index.rb
|
114
|
+
- etc/www/web_server.rb
|
113
115
|
- lib/block.rb
|
114
116
|
- lib/bookmarks.rb
|
115
117
|
- lib/buffers.rb
|
@@ -196,6 +198,7 @@ files:
|
|
196
198
|
- menus/contacts.rb
|
197
199
|
- menus/cookies.rb
|
198
200
|
- menus/couch.rb
|
201
|
+
- menus/create.rb
|
199
202
|
- menus/crop.rb
|
200
203
|
- menus/css.rb
|
201
204
|
- menus/current.rb
|
@@ -225,6 +228,7 @@ files:
|
|
225
228
|
- menus/head.rb
|
226
229
|
- menus/headings.rb
|
227
230
|
- menus/html.rb
|
231
|
+
- menus/http.rb
|
228
232
|
- menus/icon.rb
|
229
233
|
- menus/images.menu
|
230
234
|
- menus/img.rb
|
@@ -269,6 +273,7 @@ files:
|
|
269
273
|
- menus/thesaurus.rb
|
270
274
|
- menus/to.rb
|
271
275
|
- menus/twitter.rb
|
276
|
+
- menus/urls.menu
|
272
277
|
- menus/wikipedia.rb
|
273
278
|
- menus/words.rb
|
274
279
|
- spec/code_tree_spec.rb
|