xiki 0.5.0a
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +11 -0
- data/LICENSE +22 -0
- data/README.markdown +83 -0
- data/Rakefile +8 -0
- data/bin/xiki +46 -0
- data/etc/command/xiki_command.rb +203 -0
- data/etc/command/xiki_process.rb +52 -0
- data/etc/command/xiki_wrapper +2 -0
- data/etc/js/menu1.js +55 -0
- data/etc/js/xiki.js +259 -0
- data/etc/logo.png +0 -0
- data/etc/presentations/bootstrap.deck +5 -0
- data/etc/presentations/databases.deck +41 -0
- data/etc/presentations/diffs.deck +23 -0
- data/etc/presentations/documentation.deck +14 -0
- data/etc/presentations/effects.deck +5 -0
- data/etc/presentations/face.deck +297 -0
- data/etc/presentations/files.deck +79 -0
- data/etc/presentations/icons.deck +22 -0
- data/etc/presentations/images.deck +24 -0
- data/etc/presentations/key_shortcuts.deck +16 -0
- data/etc/presentations/macros.deck +18 -0
- data/etc/presentations/menu_classes.deck +44 -0
- data/etc/presentations/menu_directories.deck +30 -0
- data/etc/presentations/notes.deck +19 -0
- data/etc/presentations/other_languages.deck +55 -0
- data/etc/presentations/other_wiki_syntaxes.deck +4 -0
- data/etc/presentations/piano.deck +5 -0
- data/etc/presentations/potential/diffs.deck +38 -0
- data/etc/presentations/potential/evolution.deck +18 -0
- data/etc/presentations/potential/intro.deck +711 -0
- data/etc/presentations/potential/intro1.deck +711 -0
- data/etc/presentations/potential/intro2.deck +97 -0
- data/etc/presentations/potential/make_mysql_menu.deck +36 -0
- data/etc/presentations/potential/ruby_development.deck +17 -0
- data/etc/presentations/potential/ui_prototyping.deck +50 -0
- data/etc/presentations/potential/web_dev.deck +4 -0
- data/etc/presentations/potential/web_development.deck +10 -0
- data/etc/presentations/potential/wiki.deck +45 -0
- data/etc/presentations/presentations.deck +24 -0
- data/etc/presentations/rails_development.deck +29 -0
- data/etc/presentations/search_key_shortcuts.deck +37 -0
- data/etc/presentations/simplest_possible_ui.deck +37 -0
- data/etc/presentations/svg.deck +5 -0
- data/etc/presentations/testing.deck +28 -0
- data/etc/presentations/the_end.deck +13 -0
- data/etc/presentations/type_something_and_double_click.deck +57 -0
- data/etc/presentations/type_the_acronym.deck +144 -0
- data/etc/presentations/web_browser.deck +56 -0
- data/etc/presentations/xiki_command.deck +20 -0
- data/etc/presentations/xiki_url.deck +14 -0
- data/etc/shark.icns +0 -0
- data/etc/shark_script.icns +0 -0
- data/etc/snippets/html.notes +7 -0
- data/etc/snippets/notes.notes +20 -0
- data/etc/snippets/rb.notes +38 -0
- data/etc/templates/menu_template.menu +2 -0
- data/etc/templates/menu_template.rb +8 -0
- data/etc/templates/template.rb +5 -0
- data/etc/themes/Dark_Metal.notes +28 -0
- data/etc/themes/Orange_Path.notes +15 -0
- data/etc/themes/Shiny_Blue.notes +27 -0
- data/etc/themes/Shiny_Green.notes +27 -0
- data/etc/wrappers/wrapper.js +17 -0
- data/etc/wrappers/wrapper.py +20 -0
- data/etc/wrappers/wrapper.rb +25 -0
- data/lib/block.rb +72 -0
- data/lib/bookmarks.rb +352 -0
- data/lib/buffers.rb +170 -0
- data/lib/clipboard.rb +333 -0
- data/lib/code.rb +860 -0
- data/lib/code_tree.rb +476 -0
- data/lib/color.rb +274 -0
- data/lib/console.rb +557 -0
- data/lib/control_lock.rb +9 -0
- data/lib/control_tab.rb +176 -0
- data/lib/core_ext.rb +31 -0
- data/lib/cursor.rb +111 -0
- data/lib/deletes.rb +65 -0
- data/lib/diff_log.rb +297 -0
- data/lib/effects.rb +145 -0
- data/lib/environment.rb +5 -0
- data/lib/file_tree.rb +1875 -0
- data/lib/files.rb +334 -0
- data/lib/hide.rb +259 -0
- data/lib/history.rb +286 -0
- data/lib/image.rb +51 -0
- data/lib/incrementer.rb +15 -0
- data/lib/insert.rb +7 -0
- data/lib/irc.rb +22 -0
- data/lib/key_bindings.rb +658 -0
- data/lib/keys.rb +754 -0
- data/lib/launcher.rb +1351 -0
- data/lib/line.rb +429 -0
- data/lib/links.rb +6 -0
- data/lib/location.rb +175 -0
- data/lib/macros.rb +48 -0
- data/lib/man.rb +19 -0
- data/lib/menu.rb +708 -0
- data/lib/merb.rb +259 -0
- data/lib/message.rb +5 -0
- data/lib/meths.rb +56 -0
- data/lib/mode.rb +34 -0
- data/lib/move.rb +248 -0
- data/lib/notes.rb +1000 -0
- data/lib/numbers.rb +45 -0
- data/lib/ol.rb +203 -0
- data/lib/ol_helper.rb +44 -0
- data/lib/overlay.rb +167 -0
- data/lib/pause_means_space.rb +68 -0
- data/lib/php.rb +22 -0
- data/lib/projects.rb +21 -0
- data/lib/relinquish_exception.rb +2 -0
- data/lib/remote.rb +206 -0
- data/lib/requirer.rb +46 -0
- data/lib/rest_tree.rb +108 -0
- data/lib/ruby.rb +57 -0
- data/lib/ruby_console.rb +165 -0
- data/lib/search.rb +1572 -0
- data/lib/search_term.rb +40 -0
- data/lib/snippet.rb +68 -0
- data/lib/specs.rb +229 -0
- data/lib/styles.rb +274 -0
- data/lib/svn.rb +682 -0
- data/lib/text_util.rb +110 -0
- data/lib/tree.rb +1871 -0
- data/lib/tree_cursor.rb +87 -0
- data/lib/trouble_shooting.rb +27 -0
- data/lib/url_tree.rb +11 -0
- data/lib/view.rb +1474 -0
- data/lib/window.rb +133 -0
- data/lib/xiki.rb +404 -0
- data/menus/accounts.rb +5 -0
- data/menus/address_book.rb +21 -0
- data/menus/agenda.rb +28 -0
- data/menus/all.rb +5 -0
- data/menus/amazon.rb +16 -0
- data/menus/app.rb +16 -0
- data/menus/applescript.rb +46 -0
- data/menus/as.rb +15 -0
- data/menus/bookmarklet.rb +63 -0
- data/menus/bootstrap.rb +568 -0
- data/menus/browse.rb +13 -0
- data/menus/browser.rb +78 -0
- data/menus/cassandra_db.rb +36 -0
- data/menus/chmod.rb +27 -0
- data/menus/classes.rb +5 -0
- data/menus/coffee_script.rb +35 -0
- data/menus/computer.rb +24 -0
- data/menus/contacts.rb +5 -0
- data/menus/cookies.rb +25 -0
- data/menus/couch.rb +184 -0
- data/menus/crop.rb +45 -0
- data/menus/css.rb +55 -0
- data/menus/current.rb +5 -0
- data/menus/db.rb +12 -0
- data/menus/deck.rb +219 -0
- data/menus/dictionary.rb +9 -0
- data/menus/dir.rb +8 -0
- data/menus/disk.rb +5 -0
- data/menus/do.rb +13 -0
- data/menus/docs.rb +58 -0
- data/menus/dotsies.rb +107 -0
- data/menus/edited.rb +18 -0
- data/menus/emacs.rb +17 -0
- data/menus/enter.rb +13 -0
- data/menus/eval.rb +17 -0
- data/menus/executable.rb +16 -0
- data/menus/filter.rb +46 -0
- data/menus/firefox.rb +607 -0
- data/menus/foo.rb +30 -0
- data/menus/french.rb +7 -0
- data/menus/git.rb +185 -0
- data/menus/gito.rb +785 -0
- data/menus/google.rb +35 -0
- data/menus/google_images.rb +11 -0
- data/menus/google_patents.rb +10 -0
- data/menus/gutenberg.rb +13 -0
- data/menus/head.rb +10 -0
- data/menus/headings.rb +39 -0
- data/menus/html.rb +61 -0
- data/menus/icon.rb +40 -0
- data/menus/images.menu +2 -0
- data/menus/img.rb +15 -0
- data/menus/info.rb +9 -0
- data/menus/ip.rb +10 -0
- data/menus/iterm.rb +36 -0
- data/menus/itunes.rb +78 -0
- data/menus/javascript.rb +74 -0
- data/menus/layout.rb +18 -0
- data/menus/local_storage.rb +67 -0
- data/menus/ls.rb +19 -0
- data/menus/mac.rb +87 -0
- data/menus/maps.rb +18 -0
- data/menus/matches.rb +18 -0
- data/menus/memcache.rb +117 -0
- data/menus/mkdir.rb +23 -0
- data/menus/mongo.rb +83 -0
- data/menus/mysql.rb +294 -0
- data/menus/node.rb +88 -0
- data/menus/open.rb +19 -0
- data/menus/outline.rb +24 -0
- data/menus/piano.rb +746 -0
- data/menus/postgres.rb +34 -0
- data/menus/pre.rb +5 -0
- data/menus/python.rb +39 -0
- data/menus/rails.rb +160 -0
- data/menus/rake.rb +12 -0
- data/menus/redmine.rb +168 -0
- data/menus/riak_tree.rb +204 -0
- data/menus/rss.rb +15 -0
- data/menus/safari.rb +11 -0
- data/menus/sass.rb +15 -0
- data/menus/say.rb +6 -0
- data/menus/scale.rb +49 -0
- data/menus/serve.rb +78 -0
- data/menus/shuffle.rb +24 -0
- data/menus/spanish.rb +7 -0
- data/menus/standalone.rb +57 -0
- data/menus/tail.rb +41 -0
- data/menus/technologies.rb +19 -0
- data/menus/themes.rb +32 -0
- data/menus/thesaurus.rb +13 -0
- data/menus/to.rb +24 -0
- data/menus/twitter.rb +57 -0
- data/menus/wikipedia.rb +34 -0
- data/menus/words.rb +11 -0
- data/spec/code_tree_spec.rb +59 -0
- data/spec/diff_log_spec.rb +40 -0
- data/spec/file_tree_spec.rb +102 -0
- data/spec/keys_spec.rb +24 -0
- data/spec/line_spec.rb +68 -0
- data/spec/menu_spec.rb +50 -0
- data/spec/ol_spec.rb +98 -0
- data/spec/remote_spec.rb +43 -0
- data/spec/search_spec.rb +162 -0
- data/spec/text_util_spec.rb +119 -0
- data/spec/tree_cursor_spec.rb +91 -0
- data/spec/tree_spec.rb +955 -0
- data/tests/console_test.rb +11 -0
- data/tests/couch_db_test.rb +12 -0
- data/tests/diff_log_test.rb +43 -0
- data/tests/el_mixin.rb +16 -0
- data/tests/git_test.rb +95 -0
- data/tests/keys_test.rb +19 -0
- data/tests/line_test.rb +38 -0
- data/tests/merb_test.rb +11 -0
- data/tests/redmine_test.rb +50 -0
- data/tests/remote_test.rb +31 -0
- data/tests/rest_tree_test.rb +70 -0
- data/xiki.gemspec +37 -0
- metadata +332 -0
data/menus/layout.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class Layout
|
2
|
+
def self.menu
|
3
|
+
%`
|
4
|
+
| Keys shortcuts that start with "to+" (ctrl-t) such as to+end.
|
5
|
+
- frequent/
|
6
|
+
| layout+create: Create a new view
|
7
|
+
| layout+hide: Hide this view
|
8
|
+
| layout+next: Go to next view
|
9
|
+
| layout+previous: Go to previous view
|
10
|
+
| layout+kill: Close the current file
|
11
|
+
- all/
|
12
|
+
| TODO
|
13
|
+
|
|
14
|
+
> See also
|
15
|
+
<< view/
|
16
|
+
`
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class LocalStorage
|
2
|
+
def self.menu
|
3
|
+
"
|
4
|
+
- .all/
|
5
|
+
- docs/
|
6
|
+
> Summary
|
7
|
+
| View and manipulate records in the browser's \"Local Storage\" database.
|
8
|
+
|
|
9
|
+
> Show all records
|
10
|
+
<< all/
|
11
|
+
|
|
12
|
+
> Manipulating records
|
13
|
+
| save: double-click record contents
|
14
|
+
| delete: do+kill+it while on the record (Ctrl-d Ctrl-k Ctrl-i)
|
15
|
+
|
|
16
|
+
> Delete all keys
|
17
|
+
@ js/localStorage.clear()
|
18
|
+
"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.all key=nil, val=nil
|
22
|
+
prefix = Keys.prefix :clear=>true
|
23
|
+
|
24
|
+
|
25
|
+
if key.nil? # If nothing passed, show all keys
|
26
|
+
js = %`
|
27
|
+
var result = [];
|
28
|
+
for (var key in localStorage) { result.push(key) }
|
29
|
+
JSON.stringify(result);
|
30
|
+
`
|
31
|
+
txt = Firefox.run js, #:jquery=>1 #, :jquery_extra=>ls_function
|
32
|
+
array = JSON[txt]
|
33
|
+
return "
|
34
|
+
| None found. Create a few test records?
|
35
|
+
- a/aa
|
36
|
+
- b/bb
|
37
|
+
" if array.empty?
|
38
|
+
return array.sort.inject("") {|acc, element| "#{acc}- #{element}/\n"}
|
39
|
+
end
|
40
|
+
|
41
|
+
if Keys.delete?
|
42
|
+
Firefox.run "localStorage.removeItem(\"#{key}\")" #, :jquery=>1
|
43
|
+
Tree.to_parent if val
|
44
|
+
Tree.kill_under
|
45
|
+
View.flash "- deleted!"
|
46
|
+
# TODO: let this behave properly when returning with .flash:
|
47
|
+
# Currently it ends up one line off? Because we're treating it like it returned nil - make it treat ^.flash as nill?
|
48
|
+
# return ".flash - deleted!"
|
49
|
+
Line.delete
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
if val.nil? # If just key passed, show val
|
54
|
+
txt = Firefox.run "localStorage[\"#{key}\"]" #, :jquery=>1
|
55
|
+
return self.docs if txt.blank? && key =~ /docs\/?/
|
56
|
+
return self.api if txt.blank? && key =~ /api\/?/
|
57
|
+
return Tree.quote txt
|
58
|
+
end
|
59
|
+
|
60
|
+
Tree.unquote! val
|
61
|
+
|
62
|
+
val = ENV['txt']
|
63
|
+
txt = Firefox.run "localStorage[\"#{key}\"] = #{val.inspect}" #, :jquery=>1
|
64
|
+
View.flash "- Saved!"
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
data/menus/ls.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
class Ls
|
2
|
+
def self.docs
|
3
|
+
"
|
4
|
+
> Summary
|
5
|
+
| Simple wrapper around the 'ls' shell command. Can be used in trees.
|
6
|
+
|
7
|
+
> Example usage
|
8
|
+
@/tmp/
|
9
|
+
@ls
|
10
|
+
"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.menu *args
|
14
|
+
return self.docs if args == ['docs']
|
15
|
+
|
16
|
+
path = Tree.file :require=>1
|
17
|
+
Tree.quote Console.sync "ls -lah \"#{path}\"", :dir=>path
|
18
|
+
end
|
19
|
+
end
|
data/menus/mac.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# Starting and stopping mac
|
2
|
+
class Mac
|
3
|
+
|
4
|
+
def self.menu
|
5
|
+
%`
|
6
|
+
- Enable mac keyboard shortcuts/
|
7
|
+
| Enable macintosh-like keyboard shortcuts, like command-c
|
8
|
+
@ Mac.define_keys
|
9
|
+
- Important dirs/
|
10
|
+
@/Users/
|
11
|
+
@/Applications/
|
12
|
+
@/Applications/Utilities/
|
13
|
+
@ ~/Library/Fonts/
|
14
|
+
- api/
|
15
|
+
| Define standard mac shortcuts
|
16
|
+
@ Mac.define_keys
|
17
|
+
`
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.define_keys
|
21
|
+
self.keys
|
22
|
+
View.flash "- defined Command-C, Command-V, Command-Q, etc."
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# Use this if you're using aquamacs
|
27
|
+
#
|
28
|
+
# Put this line in your init.rb file to use the below key mappings.
|
29
|
+
#
|
30
|
+
# Mac.keys_for_aquamacs
|
31
|
+
#
|
32
|
+
def self.keys_for_aquamacs
|
33
|
+
|
34
|
+
return if ! $el.boundp(:osx_key_mode_map)
|
35
|
+
|
36
|
+
$el.define_key(:osx_key_mode_map, $el.kbd("A-0")) { Styles.font_size 110 }
|
37
|
+
$el.define_key(:osx_key_mode_map, $el.kbd("A-=")) { Styles.zoom }
|
38
|
+
$el.define_key(:osx_key_mode_map, $el.kbd("A--")) { Styles.zoom :out=>1 }
|
39
|
+
|
40
|
+
# Changes aquamacs behavior so it opens in same frame. Is there
|
41
|
+
# an aquamacs setting for this that could be used instead of redefining
|
42
|
+
# key?
|
43
|
+
$el.define_key :osx_key_mode_map, $el.kbd("A-n") do
|
44
|
+
View.to_buffer "untitled"
|
45
|
+
$el.rename_uniquely
|
46
|
+
Notes.mode
|
47
|
+
View.>> "\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
$el.define_key :osx_key_mode_map, $el.kbd("<A-return>") do
|
51
|
+
Launcher.launch_or_hide(:blink=>true)
|
52
|
+
end
|
53
|
+
|
54
|
+
$el.define_key :cua_global_keymap, $el.kbd("<C-return>"), nil # Prohibit cua from monopolizing C-return key
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Use this if you're not using aquamacs
|
60
|
+
#
|
61
|
+
# Put this line in your init.rb file to use the below key mappings.
|
62
|
+
#
|
63
|
+
# Mac.keys
|
64
|
+
#
|
65
|
+
def self.keys
|
66
|
+
|
67
|
+
# def self.keys
|
68
|
+
Keys._Q { $el.save_buffers_kill_emacs } # Command-Q to quit
|
69
|
+
Keys._C {
|
70
|
+
left, right = View.range
|
71
|
+
Effects.blink :left=>left, :right=>right
|
72
|
+
$el.kill_ring_save left, right
|
73
|
+
} # Command-C
|
74
|
+
Keys._V { $el.yank } # Command-V
|
75
|
+
Keys._A { View.to_highest; Clipboard.copy_everything } # Command-V
|
76
|
+
|
77
|
+
Keys._X {
|
78
|
+
left, right = View.range
|
79
|
+
Effects.blink :left=>left, :right=>right
|
80
|
+
$el.kill_region left, right
|
81
|
+
}
|
82
|
+
|
83
|
+
Keys._S { DiffLog.save } # save (or, with prefix, save as) **
|
84
|
+
|
85
|
+
$el.define_key :global_map, $el.kbd("M-X"), :execute_extended_command
|
86
|
+
end
|
87
|
+
end
|
data/menus/maps.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'view'
|
2
|
+
require 'effects'
|
3
|
+
|
4
|
+
class Maps
|
5
|
+
|
6
|
+
def self.menu *args
|
7
|
+
|
8
|
+
# If no arg, prompt to type something
|
9
|
+
|
10
|
+
return View.prompt "Type something to search on google maps" if args.blank?
|
11
|
+
|
12
|
+
# If arg, look it up
|
13
|
+
|
14
|
+
Firefox.url "http://maps.google.com/maps?q=#{ENV['txt'].gsub "\n", ", "}"
|
15
|
+
nil
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/menus/matches.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class Matches
|
2
|
+
def self.menu *args
|
3
|
+
|
4
|
+
# If no args, explain what it does
|
5
|
+
|
6
|
+
if args.empty?
|
7
|
+
return View.prompt "Count matches of what?"
|
8
|
+
end
|
9
|
+
|
10
|
+
# If only one arg, have them add some text
|
11
|
+
|
12
|
+
if args.length == 1
|
13
|
+
return Tree << "| Add some text here to matches the matches."
|
14
|
+
end
|
15
|
+
|
16
|
+
txt = ENV['txt'].scan(/#{args[0]}/i).length.to_s
|
17
|
+
end
|
18
|
+
end
|
data/menus/memcache.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
gem 'memcached'
|
2
|
+
require 'memcached'
|
3
|
+
require 'net/telnet'
|
4
|
+
|
5
|
+
class Memcache
|
6
|
+
def self.menu
|
7
|
+
txt =
|
8
|
+
"
|
9
|
+
- .keys/
|
10
|
+
- .start/
|
11
|
+
"
|
12
|
+
txt << "- .server/\n" if View.buffer_open? "*memcached"
|
13
|
+
txt
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.start
|
17
|
+
buffer = "*memcached"
|
18
|
+
if View.buffer_open? buffer # If already open
|
19
|
+
View.flash "- '*memcached' is already open!", :times=>4
|
20
|
+
return self.server
|
21
|
+
end
|
22
|
+
Console.run('memcached -vv -p 11211 -m 64', :buffer=>buffer)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.server
|
26
|
+
View.to_after_bar
|
27
|
+
View.to_buffer "*memcached"
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.suggest_if_not_running e
|
32
|
+
|
33
|
+
if e.message =~ /Connection refused/ || e.message =~ /SystemError: Errno 22:/ || e.message =~ /Errno 22/
|
34
|
+
|
35
|
+
return "
|
36
|
+
| > Not installed
|
37
|
+
| Memcached doesn't appear to be installed.
|
38
|
+
|
|
39
|
+
| > Install instructions
|
40
|
+
| On a mac
|
41
|
+
@$ port install memcached
|
42
|
+
|
|
43
|
+
| On ubuntu
|
44
|
+
@$ sudo apt-get install memcached
|
45
|
+
|
|
46
|
+
| > Other platforms and more info
|
47
|
+
@http://code.google.com/p/memcached/wiki/NewStart
|
48
|
+
|
|
49
|
+
" if `which memcached`.empty?
|
50
|
+
|
51
|
+
return "
|
52
|
+
> Not running
|
53
|
+
| Memcached doesn't appear to be running.
|
54
|
+
- start it) @memcache/start/"
|
55
|
+
end
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.keys *args
|
60
|
+
|
61
|
+
begin
|
62
|
+
|
63
|
+
# If nothing passed, show all keys
|
64
|
+
|
65
|
+
if args.blank?
|
66
|
+
|
67
|
+
# Hack to get all (usually) keys
|
68
|
+
con = Net::Telnet::new("Host"=>"127.0.0.1", "Port"=>11211, "Prompt" => /END/)
|
69
|
+
items = con.cmd "stats items\n"
|
70
|
+
keys = []
|
71
|
+
items.scan(/^STAT items:(\d+):number/).each do |i|
|
72
|
+
cachedump = con.cmd "stats cachedump #{i[0]} 1000"
|
73
|
+
cachedump.scan(/^ITEM (.+?) /).each {|i| keys << i[0]}
|
74
|
+
end
|
75
|
+
return "
|
76
|
+
| > No keys exist
|
77
|
+
| Create some:
|
78
|
+
- foo/
|
79
|
+
| aa
|
80
|
+
- bar/
|
81
|
+
| b: bb
|
82
|
+
" if keys.empty?
|
83
|
+
return keys.map{|k| "#{k}/"}
|
84
|
+
end
|
85
|
+
|
86
|
+
value = args.pop if Line =~ /^ *\|/
|
87
|
+
key = args.join "/"
|
88
|
+
|
89
|
+
# If just key, show the value
|
90
|
+
|
91
|
+
if value.nil?
|
92
|
+
return self.connection.get(key).to_yaml.sub(/\A--- \n?/, '').gsub(/^/, "| ")
|
93
|
+
end
|
94
|
+
|
95
|
+
if Keys.prefix == 0
|
96
|
+
self.connection.delete key
|
97
|
+
View.flash "- Deleted!"
|
98
|
+
return
|
99
|
+
end
|
100
|
+
|
101
|
+
value = YAML::load Tree.siblings(:string=>1)
|
102
|
+
self.connection.set key, value
|
103
|
+
|
104
|
+
View.flash "- Saved!"
|
105
|
+
|
106
|
+
rescue Exception=>e
|
107
|
+
return "- Not found!\n| sample value" if e.message == "Memcached::NotFound"
|
108
|
+
|
109
|
+
result = self.suggest_if_not_running(e) and return result
|
110
|
+
raise e
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.connection
|
115
|
+
Memcached.new 'localhost:11211' #, :hash=>:default
|
116
|
+
end
|
117
|
+
end
|
data/menus/mkdir.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class Mkdir
|
2
|
+
|
3
|
+
def self.menu
|
4
|
+
trunk = Xiki.trunk
|
5
|
+
return "
|
6
|
+
> Usage
|
7
|
+
| Nest @mkdir under a dir path to create the dir, like this:
|
8
|
+
|
|
9
|
+
| - /tmp/newdir/
|
10
|
+
| - @mkdir
|
11
|
+
|
|
12
|
+
" if trunk.length <= 1
|
13
|
+
|
14
|
+
closest_file_path = Tree.closest_dir
|
15
|
+
|
16
|
+
return View.flash("- Already exists: #{closest_file_path}") if File.exists?(closest_file_path)
|
17
|
+
|
18
|
+
`mkdir -p "#{closest_file_path}"`
|
19
|
+
|
20
|
+
return View.flash "- Created: #{closest_file_path}", :times=>3
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/menus/mongo.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
class Mongo
|
2
|
+
def self.menu # bucket=nil
|
3
|
+
%`
|
4
|
+
- .collections/
|
5
|
+
- docs/
|
6
|
+
> Create
|
7
|
+
@foo.save({_id:"a", txt:"b"})
|
8
|
+
|
9
|
+
> Show
|
10
|
+
@foo.find()
|
11
|
+
@foo.find({_id:"a"})
|
12
|
+
|
13
|
+
> Update
|
14
|
+
@foo.update({_id:"a"}, {txt:"bbb"})
|
15
|
+
|
16
|
+
> Delete
|
17
|
+
@foo.remove({_id:"a"})
|
18
|
+
`.unindent
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.collections collection=nil
|
22
|
+
|
23
|
+
collection.sub!(/\/$/, '') if collection
|
24
|
+
|
25
|
+
# If /, list databases
|
26
|
+
|
27
|
+
if collection.nil?
|
28
|
+
json = self.run 'printjson(db._adminCommand("listDatabases"))'
|
29
|
+
o = JSON[json]
|
30
|
+
return o["databases"].map{|d| "#{d['name']}/"}
|
31
|
+
end
|
32
|
+
|
33
|
+
self.run("db.#{collection}.find()").gsub(/^/, '| ')
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.run command
|
37
|
+
command << ".forEach(printjson)" if command =~ /.find\(/
|
38
|
+
txt = `mongo --eval '#{command}'`
|
39
|
+
|
40
|
+
if txt =~ /couldn't connect to server/
|
41
|
+
raise "> Mongo isn't running. Start it?
|
42
|
+
@/tmp/
|
43
|
+
% mongod
|
44
|
+
".unindent
|
45
|
+
end
|
46
|
+
|
47
|
+
txt.sub /(.+\n){2}/, '' # Delete first 2 lines
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.init
|
52
|
+
|
53
|
+
Launcher.add(/^db\./) do |l| # General db... lines
|
54
|
+
l.strip!
|
55
|
+
txt = self.run l
|
56
|
+
Tree.under "#{txt.strip}\n", :escape=>'| ', :no_slash=>1
|
57
|
+
end
|
58
|
+
|
59
|
+
Launcher.add(/^(\w+)\.(save|update)\(/) do |l| # Shortcut for foo.save()
|
60
|
+
l.strip!
|
61
|
+
l = "db.#{l}"
|
62
|
+
txt = self.run l
|
63
|
+
Tree.under "done#{txt.strip}\n", :escape=>'| ', :no_slash=>1
|
64
|
+
end
|
65
|
+
|
66
|
+
Launcher.add(/^(\w+)\.find\(/) do |l| # Shortcut for foo.find()
|
67
|
+
l.strip!
|
68
|
+
l = "db.#{l}"
|
69
|
+
txt = self.run l
|
70
|
+
Tree.under "#{txt.strip}\n", :escape=>'| ', :no_slash=>1
|
71
|
+
end
|
72
|
+
|
73
|
+
Launcher.add(/^(\w+)\.remove\(/) do |l| # Shortcut for foo.remove()
|
74
|
+
l.strip!
|
75
|
+
l = "db.#{l}"
|
76
|
+
txt = self.run l
|
77
|
+
Tree.under "#{txt.strip}\n", :escape=>'| ', :no_slash=>1
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
Mongo.init
|