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/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
|