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/buffers.rb
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
class Buffers
|
|
2
|
+
|
|
3
|
+
def self.menu# buffer=nil
|
|
4
|
+
"
|
|
5
|
+
- .current/
|
|
6
|
+
- .tree/
|
|
7
|
+
- 20/
|
|
8
|
+
- .search/
|
|
9
|
+
|
|
10
|
+
> Lists
|
|
11
|
+
- .list/
|
|
12
|
+
- .current/
|
|
13
|
+
|
|
14
|
+
- docs/
|
|
15
|
+
> Todo
|
|
16
|
+
"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.current *name
|
|
20
|
+
if name.empty? # If no buffer passed in, show list
|
|
21
|
+
case Keys.prefix :clear=>true
|
|
22
|
+
|
|
23
|
+
# Show all by default
|
|
24
|
+
when nil, "all": return list.map{ |b| $el.buffer_name(b) }.map{ |o| "| #{o}\n" }.join('')
|
|
25
|
+
|
|
26
|
+
# Only files (no buffers)
|
|
27
|
+
when :u: return list.select{ |b| $el.buffer_file_name(b) }.map{ |b| "| #{$el.buffer_name(b)}\n" }.join('')
|
|
28
|
+
|
|
29
|
+
# Only buffer without files
|
|
30
|
+
when 0: return list.select{ |b| ! $el.buffer_file_name(b) }.map{ |b| "| #{$el.buffer_name(b)}\n" }[1..-1].join('')
|
|
31
|
+
|
|
32
|
+
when 1: return list.select{ |b| $el.buffer_file_name(b) }.map{ |b| $el.buffer_name(b) }[1..-1]
|
|
33
|
+
when 3: return list.select{ |b| ! $el.buffer_file_name(b) && $el.buffer_name(b) =~ /^#/ }.map{ |b| $el.buffer_name(b) }
|
|
34
|
+
when 4: return list.select{ |b| ! $el.buffer_file_name(b) && $el.buffer_name(b) =~ /^\*console / }.map{ |b| $el.buffer_name(b) }
|
|
35
|
+
when 6: return list.select{ |b| $el.buffer_file_name(b) =~ /\.rb$/ }.map{ |b| $el.buffer_name(b) }
|
|
36
|
+
when 7: return list.select{ |b| $el.buffer_file_name(b) =~ /\.notes$/ }.map{ |b| $el.buffer_name(b) }
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
return
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# If a buffer name passed, get whole line and escape it
|
|
43
|
+
|
|
44
|
+
name = Line.without_indent
|
|
45
|
+
|
|
46
|
+
name.sub! /^\| /, ''
|
|
47
|
+
|
|
48
|
+
# Switch to buffer
|
|
49
|
+
View.to_after_bar if View.in_bar?
|
|
50
|
+
View.to_buffer(name)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.names_array
|
|
54
|
+
self.list.map { |b| $el.buffer_name(b) }.to_a
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.list
|
|
58
|
+
$el.buffer_list.to_a
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.tree times=0, options={}
|
|
62
|
+
times ||= History.prefix_times
|
|
63
|
+
paths = View.files[0..(times-1)]
|
|
64
|
+
if options[:dir]
|
|
65
|
+
paths = paths.grep(Regexp.new(Regexp.escape(options[:dir])))
|
|
66
|
+
end
|
|
67
|
+
puts CodeTree.tree_search_option + Tree.paths_to_tree(paths)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def self.search string, options={}
|
|
71
|
+
|
|
72
|
+
orig = View.buffer
|
|
73
|
+
|
|
74
|
+
# Get buffer from name
|
|
75
|
+
list = options[:buffer] ?
|
|
76
|
+
[self.from_string(options[:buffer])] :
|
|
77
|
+
self.list
|
|
78
|
+
found = ""
|
|
79
|
+
|
|
80
|
+
list.to_a.each do |b| # Each buffer open
|
|
81
|
+
|
|
82
|
+
file = $el.buffer_file_name(b)
|
|
83
|
+
# file = $el.buffer_file_name(b) || "*#{View.name}"
|
|
84
|
+
# Show buffers too - wasn't as simple as just removing, because of filename indenting!
|
|
85
|
+
|
|
86
|
+
next unless file
|
|
87
|
+
next if file =~ /_ol.notes/
|
|
88
|
+
|
|
89
|
+
if options[:buffer].nil? # If we're not searching in one buffer
|
|
90
|
+
next if ["todo.notes", "files.notes"].
|
|
91
|
+
member? file.sub(/.+\//, '')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Skip if a verboten file
|
|
95
|
+
unless options[:buffer]
|
|
96
|
+
next if file =~ /(\/difflog\.notes|\.log|\/\.emacs)$/
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
$el.set_buffer b
|
|
100
|
+
started = $el.point
|
|
101
|
+
View.to_top
|
|
102
|
+
found_yet = nil
|
|
103
|
+
while(true)
|
|
104
|
+
break unless $el.search_forward(string, nil, true)
|
|
105
|
+
unless found_yet
|
|
106
|
+
found << "- @#{file.sub(/(.+)\//, "\\1\/\n - ")}\n"
|
|
107
|
+
|
|
108
|
+
found_yet = true
|
|
109
|
+
end
|
|
110
|
+
found << " | #{Line.value}\n"
|
|
111
|
+
Line.end
|
|
112
|
+
end
|
|
113
|
+
View.to started
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
View.to_buffer orig
|
|
117
|
+
|
|
118
|
+
# If nothing found, just insert message
|
|
119
|
+
if found.size == 0
|
|
120
|
+
Tree << "- nothing found!\n"
|
|
121
|
+
Search.isearch string, :reverse=>1
|
|
122
|
+
return
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
Tree << found
|
|
126
|
+
# $el.highlight_regexp string, :ls_quote_highlight
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def self.from_string name
|
|
130
|
+
$el.get_buffer name
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def self.open_viewing
|
|
134
|
+
case Keys.prefix
|
|
135
|
+
when nil: Launcher.open("- Buffers.tree 25/")
|
|
136
|
+
when 0: Launcher.open("- Buffers.tree/")
|
|
137
|
+
else Launcher.open("- Buffers.tree #{Keys.prefix}/")
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def self.rename
|
|
142
|
+
options = {:prompt => "Rename buffer to: "}
|
|
143
|
+
options[:initial_input] = $el.buffer_name if Keys.prefix_u?
|
|
144
|
+
$el.rename_buffer Keys.input(options)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def self.name buffer
|
|
148
|
+
$el.buffer_name(buffer)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def self.kill name
|
|
152
|
+
self.delete name
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def self.delete name
|
|
156
|
+
$el.kill_buffer name
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def self.to name
|
|
160
|
+
View.to_buffer name
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def self.txt name
|
|
164
|
+
$el.with(:save_window_excursion) do
|
|
165
|
+
$el.switch_to_buffer name
|
|
166
|
+
View.txt
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
end
|
data/lib/clipboard.rb
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
require 'keys'
|
|
2
|
+
require 'file_tree'
|
|
3
|
+
|
|
4
|
+
# Provides copy and paste functionality
|
|
5
|
+
class Clipboard
|
|
6
|
+
|
|
7
|
+
# Stores things user copies
|
|
8
|
+
@@hash = {}
|
|
9
|
+
@@hash_by_first_letter = {}
|
|
10
|
+
|
|
11
|
+
def self.menu
|
|
12
|
+
"
|
|
13
|
+
- .log/
|
|
14
|
+
"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.log
|
|
18
|
+
result = ""
|
|
19
|
+
@@hash_by_first_letter.keys.sort.each do |k|
|
|
20
|
+
result << "| #{@@hash_by_first_letter[k]}\n"
|
|
21
|
+
end
|
|
22
|
+
result.empty? ? "- Nothing was copied yet!" : result
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.copy loc=nil, txt=nil
|
|
26
|
+
# Use string if user types it quickly
|
|
27
|
+
if ! loc
|
|
28
|
+
View.flash "Enter variable name:", :times=>1
|
|
29
|
+
loc = Keys.input(:chars=>1, :prompt=>"Enter one char (variable name to store this as): ") || "0"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
unless txt
|
|
33
|
+
left, right = View.range
|
|
34
|
+
Effects.blink :left=>left, :right=>right
|
|
35
|
+
txt = $el.buffer_substring($el.region_beginning, $el.region_end)
|
|
36
|
+
end
|
|
37
|
+
self.set(loc, txt, Keys.prefix)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.cut loc=nil
|
|
41
|
+
loc = loc.to_s
|
|
42
|
+
prefix = Keys.prefix :clear=>true # If numeric prefix, reset region
|
|
43
|
+
|
|
44
|
+
if prefix == 0
|
|
45
|
+
l, r = View.paragraph :bounds=>true
|
|
46
|
+
View.cursor = l
|
|
47
|
+
View.mark = r
|
|
48
|
+
elsif prefix.is_a?(Fixnum)
|
|
49
|
+
Line.to_left
|
|
50
|
+
View.mark = Line.left 1+prefix
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
self.copy loc
|
|
54
|
+
$el.delete_region($el.region_beginning, $el.region_end)
|
|
55
|
+
|
|
56
|
+
Location.as_spot('killed')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.paste loc=nil
|
|
60
|
+
# Use string if user types it quickly
|
|
61
|
+
loc ||= Keys.input(:chars=>1, :prompt => "Enter one char: ") || 0
|
|
62
|
+
|
|
63
|
+
$el.set_mark_command nil
|
|
64
|
+
|
|
65
|
+
loc = loc.to_s
|
|
66
|
+
txt = @@hash[loc] || @@hash_by_first_letter[loc] # If nothing, try to grab by first letter
|
|
67
|
+
|
|
68
|
+
# If nothing, try to grab from what's been searched
|
|
69
|
+
txt ||= Search.searches.find{|o| o =~ /^#{loc}/i}
|
|
70
|
+
|
|
71
|
+
return View.message("Nothing to search for matching '#{loc}'.", :beep=>1) if txt.nil?
|
|
72
|
+
|
|
73
|
+
($el.elvar.current_prefix_arg || 1).times do # Get from corresponding register
|
|
74
|
+
View << txt
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.get key='0', options={}
|
|
79
|
+
val = @@hash[key.to_s]
|
|
80
|
+
if options[:add_linebreak]
|
|
81
|
+
val = "#{val}\n" unless val[/\n$/]
|
|
82
|
+
end
|
|
83
|
+
val
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def self.[] key
|
|
87
|
+
self.get key.to_s
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def self.[]= key, to
|
|
91
|
+
self.set key.to_s, to
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.display
|
|
95
|
+
@@hash.each do |k, v|
|
|
96
|
+
insert [k, v].to_s
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def self.hash
|
|
101
|
+
@@hash
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def self.hash_by_first_letter
|
|
105
|
+
@@hash_by_first_letter
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def self.list
|
|
109
|
+
$el.switch_to_buffer "*clipboard*"
|
|
110
|
+
$el.erase_buffer
|
|
111
|
+
Notes.mode
|
|
112
|
+
|
|
113
|
+
Clipboard.hash.sort.each do |a, b|
|
|
114
|
+
$el.insert "| #{a}\n#{b}\n\n"
|
|
115
|
+
end
|
|
116
|
+
$el.beginning_of_buffer
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def self.set loc, str, append=nil
|
|
120
|
+
loc = loc.to_s
|
|
121
|
+
# Save in corresponding register (or append if prefix)
|
|
122
|
+
if append
|
|
123
|
+
@@hash[loc] += str
|
|
124
|
+
else
|
|
125
|
+
# Store as path
|
|
126
|
+
@@hash["/"] = $el.expand_file_name( $el.buffer_file_name ? $el.buffer_file_name : $el.elvar.default_directory )
|
|
127
|
+
if $el.buffer_file_name
|
|
128
|
+
# Store as tree snippet
|
|
129
|
+
@@hash["="] = FileTree.snippet :txt=>str
|
|
130
|
+
@@hash["."] = "#{$el.file_name_nondirectory($el.buffer_file_name)}"
|
|
131
|
+
@@hash["\\"] = "#{$el.elvar.default_directory}\n #{$el.file_name_nondirectory($el.buffer_file_name)}"
|
|
132
|
+
end
|
|
133
|
+
@@hash[loc] = str
|
|
134
|
+
$el.x_select_text str if loc == "0" # If 0, store in OS clipboard
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def self.do_as_snake_case
|
|
139
|
+
Keys.prefix_times.times do
|
|
140
|
+
word = Line.symbol(:delete => true)
|
|
141
|
+
$el.insert TextUtil.snake_case(word)
|
|
142
|
+
Move.forward
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def self.do_as_camel_case
|
|
147
|
+
Keys.prefix_times.times do
|
|
148
|
+
word = Line.symbol(:delete => true)
|
|
149
|
+
$el.insert TextUtil.camel_case(word)
|
|
150
|
+
Move.forward
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def self.do_as_upper_case
|
|
155
|
+
Keys.prefix_times.times do
|
|
156
|
+
word = Line.symbol(:delete => true)
|
|
157
|
+
$el.insert word.upcase
|
|
158
|
+
Move.forward
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def self.do_as_lower_case
|
|
163
|
+
Keys.prefix_times.times do
|
|
164
|
+
word = Line.symbol(:delete => true)
|
|
165
|
+
$el.insert word.downcase
|
|
166
|
+
Move.forward
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def self.copy_paragraph options={}
|
|
171
|
+
prefix = Keys.prefix
|
|
172
|
+
|
|
173
|
+
if prefix == :u or options[:rest] # If U prefix, get rest of paragraph
|
|
174
|
+
left, right = View.paragraph(:bounds => true, :start_here => true)
|
|
175
|
+
else
|
|
176
|
+
if prefix # If numeric prefix
|
|
177
|
+
self.as_line
|
|
178
|
+
return
|
|
179
|
+
end
|
|
180
|
+
# If no prefix, get whole paragraph
|
|
181
|
+
left, right = View.paragraph(:bounds => true)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
if options[:just_return]
|
|
185
|
+
return [View.txt(left, right), left, right]
|
|
186
|
+
end
|
|
187
|
+
$el.goto_char left
|
|
188
|
+
$el.set_mark right
|
|
189
|
+
Effects.blink(:left => left, :right => right)
|
|
190
|
+
Clipboard.copy("0")
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def self.diff_1_and_2
|
|
194
|
+
# Compare clipboard 1 with 2
|
|
195
|
+
# Unquote if several spaces and |
|
|
196
|
+
View.to_buffer "1", :clear => true
|
|
197
|
+
one = Clipboard["1"]
|
|
198
|
+
one.gsub!(/^ +\|/, '') if one =~ /\A +\|/
|
|
199
|
+
$el.insert Clipboard["1"]
|
|
200
|
+
|
|
201
|
+
View.to_buffer "2", :clear => true
|
|
202
|
+
one = Clipboard["2"]
|
|
203
|
+
one.gsub!(/^ +\|/, '') if one =~ /\A +\|/
|
|
204
|
+
$el.insert Clipboard["2"]
|
|
205
|
+
|
|
206
|
+
$el.ediff_buffers "1", "2"
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def self.as_thing
|
|
210
|
+
|
|
211
|
+
orig = Location.new
|
|
212
|
+
|
|
213
|
+
# If at end of space, grab as tree
|
|
214
|
+
if Line.indent.length == View.column
|
|
215
|
+
left = Line.left
|
|
216
|
+
return
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# If on blank spaces, copy them
|
|
220
|
+
if $el.buffer_substring($el.point-1, $el.point+1) =~ /[ \n] /
|
|
221
|
+
$el.skip_chars_forward " "
|
|
222
|
+
right = $el.point
|
|
223
|
+
$el.skip_chars_backward " "
|
|
224
|
+
left = $el.point
|
|
225
|
+
else
|
|
226
|
+
$el.skip_chars_forward " "
|
|
227
|
+
left, right = $el.bounds_of_thing_at_point(:sexp).to_a
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
if Keys.prefix_u?
|
|
231
|
+
left += 1
|
|
232
|
+
right -= 1
|
|
233
|
+
end
|
|
234
|
+
Effects.blink(:left=>left, :right=>right)
|
|
235
|
+
|
|
236
|
+
txt = View.txt(left, right)
|
|
237
|
+
Clipboard.set "0", txt
|
|
238
|
+
View.to right
|
|
239
|
+
# View.mark left # What did this do?
|
|
240
|
+
Clipboard.save_by_first_letter txt
|
|
241
|
+
|
|
242
|
+
orig.go
|
|
243
|
+
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def self.as_object
|
|
247
|
+
set("0", $el.thing_at_point(:symbol))
|
|
248
|
+
left, right = $el.bounds_of_thing_at_point(:symbol).to_a
|
|
249
|
+
Effects.blink(:left=>left, :right=>right)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def self.copy_everything
|
|
253
|
+
Effects.blink :what=>:all
|
|
254
|
+
Clipboard.set("0", $el.buffer_string)
|
|
255
|
+
$el.set_mark($el.point_max)
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
def self.as_line many=nil
|
|
259
|
+
prefix = Keys.prefix :clear=>true
|
|
260
|
+
|
|
261
|
+
return FileTree.copy_path if prefix == :u
|
|
262
|
+
|
|
263
|
+
many ||= prefix || 1
|
|
264
|
+
Move.to_axis
|
|
265
|
+
left = Line.left
|
|
266
|
+
right = Line.left(many+1)
|
|
267
|
+
line = View.txt(left, right)
|
|
268
|
+
Clipboard.set("0", line)
|
|
269
|
+
Effects.blink :left=>left, :right=>right
|
|
270
|
+
$el.set_mark(right)
|
|
271
|
+
Clipboard.save_by_first_letter line # Store for retrieval with enter_yank
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def self.enter_replacement
|
|
275
|
+
# If on whitespace, move to off of it
|
|
276
|
+
$el.skip_chars_forward " "
|
|
277
|
+
|
|
278
|
+
orig = $el.point
|
|
279
|
+
Move.to_other_bracket
|
|
280
|
+
View.delete orig, $el.point
|
|
281
|
+
View.insert Clipboard['0']
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def self.as_clipboard
|
|
285
|
+
prefix = Keys.prefix :clear=>true
|
|
286
|
+
if prefix == 0
|
|
287
|
+
l, r = View.paragraph :bounds=>true
|
|
288
|
+
Effects.blink :left=>l, :right=>r
|
|
289
|
+
cursor = View.cursor
|
|
290
|
+
View.cursor = l
|
|
291
|
+
Location.as_spot('clipboard')
|
|
292
|
+
Clipboard["0"] = View.txt(l, r)
|
|
293
|
+
View.cursor = cursor
|
|
294
|
+
return
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
if prefix == :-
|
|
298
|
+
l, r = View.range
|
|
299
|
+
Effects.blink :left=>l, :right=>r
|
|
300
|
+
Clipboard["0"] = View.selection.gsub(/^ *\|.?/, '')
|
|
301
|
+
return
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
Location.as_spot('clipboard')
|
|
305
|
+
|
|
306
|
+
# If numeric prefix, get next n lines and put in clipboard
|
|
307
|
+
if prefix.is_a?(Fixnum)
|
|
308
|
+
l, r = Line.left, Line.left(prefix + 1)
|
|
309
|
+
Effects.blink :left=>l, :right=>r
|
|
310
|
+
Clipboard["0"] = View.txt(l, r)
|
|
311
|
+
|
|
312
|
+
View.set_mark(r)
|
|
313
|
+
return
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
Clipboard.copy("0")
|
|
317
|
+
Clipboard.save_by_first_letter View.selection # Store for retrieval with enter_yank
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
def self.save_by_first_letter txt
|
|
321
|
+
key = txt[/[a-z]/i]
|
|
322
|
+
return unless key
|
|
323
|
+
@@hash_by_first_letter[key.downcase] = txt
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
def self.enter_yank
|
|
327
|
+
ch = Keys.input :chars=>1
|
|
328
|
+
value = @@hash_by_first_letter[ch]
|
|
329
|
+
return unless value
|
|
330
|
+
View.insert value
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
end
|