xiki 0.5.0a
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 +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
|