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/lib/merb.rb
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
require "launcher"
|
|
2
|
+
|
|
3
|
+
class Merb
|
|
4
|
+
|
|
5
|
+
def self.menu name=nil, port=nil
|
|
6
|
+
unless name # Print menu
|
|
7
|
+
r = "+ current dir: #{View.dir}, 4000\n"
|
|
8
|
+
r << "+ upper: #{View.dir_of_after_bar}, 4000\n" if View.in_bar?
|
|
9
|
+
r + "
|
|
10
|
+
+ tmp: /tmp/merb1, 4000
|
|
11
|
+
+ .links/
|
|
12
|
+
- .snippets/
|
|
13
|
+
+ .version/
|
|
14
|
+
".unindent
|
|
15
|
+
else # Print options
|
|
16
|
+
"
|
|
17
|
+
- .create
|
|
18
|
+
- .start
|
|
19
|
+
- .url '/'
|
|
20
|
+
+ .shells/
|
|
21
|
+
+ .generate/
|
|
22
|
+
+ .rake/
|
|
23
|
+
+ .models/
|
|
24
|
+
+ .db/
|
|
25
|
+
+ .files/
|
|
26
|
+
"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.shells dir, port=nil
|
|
31
|
+
puts "
|
|
32
|
+
- .console
|
|
33
|
+
- .shell
|
|
34
|
+
"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.files dir, port=nil
|
|
38
|
+
puts "- #{self.path_from_dir(dir)}/"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.generate dir, port=nil
|
|
42
|
+
puts "
|
|
43
|
+
- .merb_gen 'controller posts'
|
|
44
|
+
- .merb_gen 'model post body:string'
|
|
45
|
+
- .merb_gen 'resource post body:string'
|
|
46
|
+
"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.rake dir, port, task=nil
|
|
50
|
+
unless task
|
|
51
|
+
#puts self.path_from_dir(dir)
|
|
52
|
+
out = Console.run "rake -T", :dir => self.path_from_dir(dir), :sync => true
|
|
53
|
+
# Pull out tasks
|
|
54
|
+
out.scan(/^rake ([\w:]+)/) do |m|
|
|
55
|
+
puts "- #{m[0]}"
|
|
56
|
+
end
|
|
57
|
+
return
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Console.run "rake #{task}", :dir => self.path_from_dir(dir), :buffer => "*rake #{dir}"
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.merb_gen command, dir, port=nil
|
|
65
|
+
Console.run "merb-gen #{command} --no-color", :dir => self.path_from_dir(dir), :buffer => "*merb-gen #{dir}"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.links
|
|
69
|
+
puts "
|
|
70
|
+
- home: http://www.merbivore.com/
|
|
71
|
+
- open-source book: http://book.merbist.com/
|
|
72
|
+
"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.db dir, port
|
|
76
|
+
puts "
|
|
77
|
+
- .db_create
|
|
78
|
+
- .migrate
|
|
79
|
+
"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def self.db_create dir, port
|
|
83
|
+
Mysql.create_db self.name_from_dir(dir) + "_development"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def self.snippets
|
|
87
|
+
puts "- create (o): Foo.create(:a => 'aa')"
|
|
88
|
+
puts "- find first (o): y Foo.first"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def self.create dir, port=nil
|
|
92
|
+
# Split into dir and name
|
|
93
|
+
dir = self.path_from_dir(dir)
|
|
94
|
+
path, name = dir.match(/(.+)\/(.+)/)[1..2]
|
|
95
|
+
Console.run "merb-gen app -f --no-color #{name}", :dir=>path, :buffer=>"*merb-gen app #{name}" #, :sync=>true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.start dir, port
|
|
99
|
+
Console.run "merb -a thin -p #{port}", :dir=>self.path_from_dir(dir), :buffer=>"*merb #{dir}"
|
|
100
|
+
# Console.run "merb -p #{port}", :dir=>self.path_from_dir(dir), :buffer=>"*merb #{dir}"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def self.shell dir, port
|
|
104
|
+
Console.run "", :dir=>self.path_from_dir(dir)#, :buffer=>"*merb #{dir}"
|
|
105
|
+
|
|
106
|
+
# buffer = "*" + self.name_from_dir(dir) + " merb shell"
|
|
107
|
+
|
|
108
|
+
# path = self.path_from_dir(dir)
|
|
109
|
+
# View.to_after_bar
|
|
110
|
+
|
|
111
|
+
# # Just go there if already open
|
|
112
|
+
# if View.buffer_open? buffer
|
|
113
|
+
# View.to_buffer buffer
|
|
114
|
+
# return
|
|
115
|
+
# end
|
|
116
|
+
|
|
117
|
+
# Console.run nil, :path => path, :buffer => buffer
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# def self.url path='/', dir=nil, port
|
|
121
|
+
# $el.browse_url "http://localhost:#{port}#{path}"
|
|
122
|
+
# end
|
|
123
|
+
|
|
124
|
+
def self.url path, dir, port
|
|
125
|
+
$el.browse_url "http://localhost:#{port}#{path}"
|
|
126
|
+
nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def self.console dir=nil, port=nil
|
|
130
|
+
b = "*merb console #{self.name_from_dir(dir)}"
|
|
131
|
+
if View.buffer_open?(b)
|
|
132
|
+
View.handle_bar
|
|
133
|
+
View.to_buffer b
|
|
134
|
+
else
|
|
135
|
+
Console.run "merb -i", :dir => dir, :buffer => b
|
|
136
|
+
end
|
|
137
|
+
nil
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def self.migrate dir=nil, port=nil
|
|
141
|
+
b = "*merb console #{self.name_from_dir(dir)}"
|
|
142
|
+
|
|
143
|
+
if View.buffer_open?(b)
|
|
144
|
+
View.handle_bar
|
|
145
|
+
View.to_buffer b
|
|
146
|
+
else # If console not open, open it
|
|
147
|
+
self.console dir
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
View.to_buffer(b)
|
|
151
|
+
$el.insert("repository.auto_migrate!")
|
|
152
|
+
#$el.insert("DataMapper::Base.auto_migrate!")
|
|
153
|
+
Console.enter
|
|
154
|
+
|
|
155
|
+
# TODO: item for migrating test
|
|
156
|
+
# - always take env as param?
|
|
157
|
+
# - default to 'development'
|
|
158
|
+
# - auto_migrate MERB_ENV=test
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def self.name_from_dir dir
|
|
162
|
+
dir = View.dir_of_after_bar if dir == "."
|
|
163
|
+
dir[/(\w+)\/?$/, 1]
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def self.path_from_dir dir
|
|
167
|
+
# If ., grab path of window after bar
|
|
168
|
+
dir = View.dir_of_after_bar if dir == "."
|
|
169
|
+
Bookmarks.expand(dir, :absolute => true)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def self.models model=nil
|
|
173
|
+
# If no model specified, show all
|
|
174
|
+
unless model
|
|
175
|
+
Dir.foreach(Bookmarks['$mo']) { |m|
|
|
176
|
+
next unless m =~ /(.+)\.rb$/
|
|
177
|
+
puts "+ #{TextUtil.camel_case($1)}/"
|
|
178
|
+
}
|
|
179
|
+
return
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Show options
|
|
183
|
+
puts "
|
|
184
|
+
+ .first/
|
|
185
|
+
+ .recent 1/
|
|
186
|
+
+ .all/
|
|
187
|
+
+ .count/
|
|
188
|
+
+ .first \":name => 'foo'\"/
|
|
189
|
+
+ .recent 1, \":name => 'foo'\"/
|
|
190
|
+
+ .all \":name => 'foo'\"/
|
|
191
|
+
+ .count \":name => 'foo'\"/
|
|
192
|
+
"
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def self.first *args
|
|
196
|
+
# If 2 args, it's where, model
|
|
197
|
+
where = (args.size == 2) ? "(#{args.shift})" : ''
|
|
198
|
+
model = args.shift
|
|
199
|
+
model.sub! /\/$/, ''
|
|
200
|
+
puts RubyConsole.at(:m, "y #{model}.first#{where}")
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def self.all *args
|
|
204
|
+
# If 2 args, it's where, model
|
|
205
|
+
where = (args.size == 2) ? "(#{args.shift})" : ''
|
|
206
|
+
model = args.shift
|
|
207
|
+
model.sub! /\/$/, ''
|
|
208
|
+
puts RubyConsole.at(:m, "y #{model}.all#{where}")
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def self.count *args
|
|
212
|
+
# If 2 args, it's where, model
|
|
213
|
+
where = (args.size == 2) ? "(#{args.shift})" : ''
|
|
214
|
+
model = args.shift
|
|
215
|
+
model.sub! /\/$/, ''
|
|
216
|
+
puts RubyConsole.at(:m, "puts #{model}.count#{where}")
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def self.recent *args
|
|
220
|
+
number = args.shift
|
|
221
|
+
where = (args.size == 2) ? "#{args.shift}, " : ''
|
|
222
|
+
model = args.shift
|
|
223
|
+
model.sub! /\/$/, ''
|
|
224
|
+
|
|
225
|
+
number ||= 1
|
|
226
|
+
|
|
227
|
+
model.sub! /\/$/, ''
|
|
228
|
+
puts RubyConsole.at(:m, "y #{model}.all(#{where}:order => [:updated_at.desc], :limit => #{number})")
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def self.version
|
|
232
|
+
Console.run('merb --version', :sync=>true)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def self.launch_merb_log_line line
|
|
236
|
+
# if Keys.prefix_u # If U, just go there
|
|
237
|
+
# Pull out action and controller
|
|
238
|
+
action = line[/"action"=>"(.+?)"/, 1]
|
|
239
|
+
controller = line[/"controller"=>"(.+?)"/, 1]
|
|
240
|
+
# Open controller
|
|
241
|
+
View.open "$co/#{controller}.rb"
|
|
242
|
+
# Jump to method
|
|
243
|
+
View.to_highest
|
|
244
|
+
Search.forward "^\\s-+def #{action}[^a-z_]"
|
|
245
|
+
Line.to_beginning
|
|
246
|
+
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def self.init
|
|
250
|
+
# Jump to controller from line in merb log
|
|
251
|
+
Launcher.add(/^.* ~ Routed to: \{/) do |line|
|
|
252
|
+
Merb.launch_merb_log_line line
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
Merb.init
|
data/lib/message.rb
ADDED
data/lib/meths.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Is this still being used?
|
|
2
|
+
|
|
3
|
+
gem 'method_source'
|
|
4
|
+
require 'method_source'
|
|
5
|
+
|
|
6
|
+
# Adds .drill method to Object and Class
|
|
7
|
+
|
|
8
|
+
# For:
|
|
9
|
+
# my_instace.drill
|
|
10
|
+
|
|
11
|
+
class ::Object
|
|
12
|
+
# def drill method=nil
|
|
13
|
+
|
|
14
|
+
# # If no method, show all
|
|
15
|
+
# if method.nil?
|
|
16
|
+
# result = ""
|
|
17
|
+
# methods = self.methods - Object.methods
|
|
18
|
+
# cmethods = self.class.methods - Class.methods
|
|
19
|
+
# return methods.sort.map{|o| "#{o}/"} + cmethods.sort.map{|o| "self.#{o}/"}
|
|
20
|
+
# end
|
|
21
|
+
|
|
22
|
+
# # Method passed
|
|
23
|
+
|
|
24
|
+
# method
|
|
25
|
+
|
|
26
|
+
# # CodeTree.tree_search_option + result
|
|
27
|
+
# end
|
|
28
|
+
|
|
29
|
+
def self.meths method=nil
|
|
30
|
+
Class.meths_internal self, method
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def meths method=nil
|
|
34
|
+
Class.meths_internal self.class, method
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.meths_internal clazz, method=nil
|
|
38
|
+
# If no method, show all
|
|
39
|
+
if method.nil?
|
|
40
|
+
result = ""
|
|
41
|
+
methods = clazz.instance_methods - Object.methods
|
|
42
|
+
cmethods = clazz.methods - Class.methods
|
|
43
|
+
return cmethods.sort.map{|o| ".#{o}"} + methods.sort.map{|o| "##{o}"}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Method passed
|
|
47
|
+
|
|
48
|
+
method.sub! /\/$/, ''
|
|
49
|
+
if method =~ /\.(.+)/
|
|
50
|
+
return "- " + clazz.method($1).source_location.join(':')
|
|
51
|
+
end
|
|
52
|
+
"- " + clazz.instance_method(method).source_location.join(':')
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
data/lib/mode.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Helps you define modes.
|
|
2
|
+
#
|
|
3
|
+
# Sample usage:
|
|
4
|
+
# Mode.define(:deck, ".deck") do
|
|
5
|
+
# Deck.apply_styles
|
|
6
|
+
# end
|
|
7
|
+
#
|
|
8
|
+
class Mode
|
|
9
|
+
|
|
10
|
+
def self.menu
|
|
11
|
+
"
|
|
12
|
+
- Put something here.
|
|
13
|
+
"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Easy way to define a mode
|
|
17
|
+
def self.define name, extension, &block
|
|
18
|
+
|
|
19
|
+
return if ! $el
|
|
20
|
+
|
|
21
|
+
# Mode function
|
|
22
|
+
$el.defun("#{name}_mode".to_sym, :interactive => "", :docstring => "Apply #{name} styles, etc") do
|
|
23
|
+
$el.el4r_lisp_eval "(setq font-lock-defaults '(nil t))"
|
|
24
|
+
block.call
|
|
25
|
+
|
|
26
|
+
map_name = "#{name}_mode_map".to_sym
|
|
27
|
+
$el.use_local_map $el.elvar.send(map_name) if $el.boundp(map_name)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Associate with file extension
|
|
31
|
+
$el.el4r_lisp_eval %Q<(add-to-list 'auto-mode-alist '("\\\\#{extension}\\\\'" . #{name}-mode))>
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/move.rb
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
require 'keys'
|
|
2
|
+
|
|
3
|
+
# Provides different ways of moving cursor.
|
|
4
|
+
class Move
|
|
5
|
+
|
|
6
|
+
# Go to last line having indent
|
|
7
|
+
def self.to_indent
|
|
8
|
+
direction_down = true # Assume down
|
|
9
|
+
prefix = Keys.prefix
|
|
10
|
+
line = Line.value
|
|
11
|
+
|
|
12
|
+
if prefix.is_a? Fixnum # If U, reverse
|
|
13
|
+
indent = prefix # If numeric, make that be the indent
|
|
14
|
+
else
|
|
15
|
+
direction_down = ! direction_down if line =~ /^ *(end|\]|\}|\))$/ # If end of block, reverse direction
|
|
16
|
+
|
|
17
|
+
if prefix == :u # If U, reverse
|
|
18
|
+
direction_down = false
|
|
19
|
+
else
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
column = View.column
|
|
24
|
+
indent ||= Line.indent(line).size
|
|
25
|
+
|
|
26
|
+
# If negative, reverse direction and amke positive
|
|
27
|
+
if indent < 0
|
|
28
|
+
direction_down = false
|
|
29
|
+
indent = 0 - indent
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
orig = Location.new
|
|
33
|
+
# Search for matching in right direction
|
|
34
|
+
if direction_down == false
|
|
35
|
+
Line.to_left
|
|
36
|
+
success = Search.backward "^ \\{#{indent}\\}[^ \t\n]"
|
|
37
|
+
else
|
|
38
|
+
Line.next
|
|
39
|
+
success = Search.forward "^ \\{#{indent}\\}[^ \t\n]"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
Move.to_column prefix.is_a?(Fixnum) ? indent : column
|
|
43
|
+
|
|
44
|
+
unless success
|
|
45
|
+
View.beep
|
|
46
|
+
orig.go
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.to_next_paragraph options={}
|
|
51
|
+
prefix = Keys.prefix :clear=>1
|
|
52
|
+
if prefix == :u # If C-u, just go to end
|
|
53
|
+
if Line.blank?
|
|
54
|
+
Line.value(2) =~ /./ ? # If on blank line but next line has stuff, just move down
|
|
55
|
+
Line.next :
|
|
56
|
+
Move.to_next_paragraph
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Search.forward "^[ \t]*$", :go_anyway=>1
|
|
60
|
+
|
|
61
|
+
Move.to_axis
|
|
62
|
+
return
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
return Line.next if options[:no_skip] && Line.blank? && Line.value(2) =~ /./ # Don't skip if right before paragraph
|
|
66
|
+
|
|
67
|
+
prefix = prefix.is_a?(Fixnum) ? prefix : 1
|
|
68
|
+
prefix.times do
|
|
69
|
+
Search.forward "\n[ \t]*\\(\n+[ \t]*\\)+", :go_anyway=>1
|
|
70
|
+
end
|
|
71
|
+
$el.beginning_of_line
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def self.to_previous_paragraph
|
|
75
|
+
prefix = Keys.prefix :clear=>1
|
|
76
|
+
if prefix == :u # If C-u, just go to end
|
|
77
|
+
|
|
78
|
+
# If line before us isn't blank, move past this paragraph first
|
|
79
|
+
Move.to_previous_paragraph if Line.value(0) =~ /./
|
|
80
|
+
|
|
81
|
+
Search.backward ".", :go_anyway=>1 # Go to non-blank line
|
|
82
|
+
Line.next
|
|
83
|
+
return
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
prefix = prefix.is_a?(Fixnum) ? prefix : 1
|
|
87
|
+
|
|
88
|
+
prefix.times do
|
|
89
|
+
$el.skip_chars_backward "\n "
|
|
90
|
+
$el.re_search_backward "\n[ \t]*\\(\n+[ \t]*\\)+", nil, 1
|
|
91
|
+
end
|
|
92
|
+
$el.skip_chars_forward "\n "
|
|
93
|
+
$el.beginning_of_line
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def self.to_window n, options={}
|
|
97
|
+
|
|
98
|
+
views = View.list # Get views in this window
|
|
99
|
+
|
|
100
|
+
if n >= views.size # If they wanted to go further than exists
|
|
101
|
+
$el.select_window(views[views.size - 1])
|
|
102
|
+
else
|
|
103
|
+
$el.select_window(views[n-1])
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
Effects.blink(:what=>:line) if options[:blink]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def self.to_last_window options={}
|
|
110
|
+
|
|
111
|
+
View.to_nth(View.list.size - 1)
|
|
112
|
+
|
|
113
|
+
Effects.blink(:what=>:line) if options[:blink]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.to_line n=nil
|
|
117
|
+
# Use arg or numeric prefix or get input
|
|
118
|
+
n = n || $el.elvar.current_prefix_arg || Keys.input(:prompt=>"Go to line number: ")
|
|
119
|
+
$el.goto_line n.to_i
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Move to the specified column.
|
|
123
|
+
def self.to_column n=nil
|
|
124
|
+
|
|
125
|
+
prefix = Keys.prefix :clear=>1
|
|
126
|
+
|
|
127
|
+
# If dash+, go to specific char
|
|
128
|
+
if prefix == :-
|
|
129
|
+
return View.cursor = Keys.input(:prompt=>"Point to go to: ", :timed=>1).to_i
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
n = n || prefix || Keys.input(:prompt=>"column to go to: ").to_i
|
|
133
|
+
if n < 0
|
|
134
|
+
Move.to_end
|
|
135
|
+
n = $el.abs(n)
|
|
136
|
+
n > length = Line.txt.length and n = length
|
|
137
|
+
Move.backward n
|
|
138
|
+
return
|
|
139
|
+
end
|
|
140
|
+
$el.move_to_column n# - 1
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Go to opposite bracket
|
|
144
|
+
def self.to_other_bracket
|
|
145
|
+
prefix = Keys.prefix
|
|
146
|
+
# If prefix or after closing bracket, go backward
|
|
147
|
+
last_char = $el.point == 1 ? "" : $el.buffer_substring($el.point-1, $el.point)
|
|
148
|
+
|
|
149
|
+
# If numeric prefix
|
|
150
|
+
if prefix.class == Fixnum
|
|
151
|
+
if prefix > 0
|
|
152
|
+
prefix.times { $el.forward_sexp }
|
|
153
|
+
else
|
|
154
|
+
(0-prefix).times { $el.backward_sexp }
|
|
155
|
+
end
|
|
156
|
+
elsif prefix == :u or last_char =~ /[)}\]'">]/
|
|
157
|
+
$el.backward_sexp
|
|
158
|
+
# Otherwise, go forward
|
|
159
|
+
else
|
|
160
|
+
$el.forward_sexp
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def self.backward count=nil
|
|
165
|
+
count ||= Keys.prefix# :clear => true
|
|
166
|
+
count ||= 1
|
|
167
|
+
case count
|
|
168
|
+
when :u; $el.backward_word 1
|
|
169
|
+
when :uu; $el.backward_word 2
|
|
170
|
+
when :uuu; $el.backward_word 3
|
|
171
|
+
else
|
|
172
|
+
$el.backward_char count
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def self.forward count=nil
|
|
177
|
+
|
|
178
|
+
count ||= Keys.prefix# :clear => true
|
|
179
|
+
count ||= 1
|
|
180
|
+
case count
|
|
181
|
+
when :u
|
|
182
|
+
$el.forward_word 1
|
|
183
|
+
when :uu
|
|
184
|
+
$el.forward_word 2
|
|
185
|
+
when :uuu
|
|
186
|
+
$el.forward_word 3
|
|
187
|
+
else
|
|
188
|
+
$el.forward_char(count) rescue nil # In case tried to move past end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def self.top
|
|
193
|
+
$el.beginning_of_buffer
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def self.bottom
|
|
197
|
+
$el.end_of_buffer
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def self.to_quote
|
|
201
|
+
prefix = Keys.prefix :clear=>true
|
|
202
|
+
if prefix.nil?
|
|
203
|
+
times = 1
|
|
204
|
+
Keys.clear_prefix
|
|
205
|
+
elsif prefix.is_a? Fixnum
|
|
206
|
+
times = prefix
|
|
207
|
+
View.to_relative
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
(times||1).times do
|
|
211
|
+
Line.next if Line.matches(/^ *\|/)
|
|
212
|
+
$el.re_search_forward "^ *|"
|
|
213
|
+
$el.backward_char
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# If on a quote, move off
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Move to file in tree (not dir) ?
|
|
220
|
+
def self.to_junior
|
|
221
|
+
Keys.prefix_times.times do
|
|
222
|
+
# Move to line without / at end
|
|
223
|
+
Line.next if Line.matches(/^ +[+-]? ?[a-zA-Z_-].+[^\/\n]$/)
|
|
224
|
+
$el.re_search_forward "^ +[+-]? ?[a-zA-Z_-].+[^\/\n]$"
|
|
225
|
+
Line.to_words
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# Moves cursor to left of line:
|
|
230
|
+
#
|
|
231
|
+
# Move.to_axis
|
|
232
|
+
# Move.to_axiss
|
|
233
|
+
def self.to_axis
|
|
234
|
+
n = Keys.prefix_n # Check for numeric prefix
|
|
235
|
+
Line.next(n) if n.is_a? Fixnum # If there, move down
|
|
236
|
+
Line.to_left
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Moves cursor to left of line:
|
|
240
|
+
#
|
|
241
|
+
# Move.to_end
|
|
242
|
+
def self.to_end n=nil
|
|
243
|
+
n ||= Keys.prefix_n # Check for numeric prefix
|
|
244
|
+
Line.next(n) if n.is_a? Fixnum # If there, move down
|
|
245
|
+
Line.to_right
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
end
|