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.
Files changed (252) hide show
  1. data/Gemfile +11 -0
  2. data/LICENSE +22 -0
  3. data/README.markdown +83 -0
  4. data/Rakefile +8 -0
  5. data/bin/xiki +46 -0
  6. data/etc/command/xiki_command.rb +203 -0
  7. data/etc/command/xiki_process.rb +52 -0
  8. data/etc/command/xiki_wrapper +2 -0
  9. data/etc/js/menu1.js +55 -0
  10. data/etc/js/xiki.js +259 -0
  11. data/etc/logo.png +0 -0
  12. data/etc/presentations/bootstrap.deck +5 -0
  13. data/etc/presentations/databases.deck +41 -0
  14. data/etc/presentations/diffs.deck +23 -0
  15. data/etc/presentations/documentation.deck +14 -0
  16. data/etc/presentations/effects.deck +5 -0
  17. data/etc/presentations/face.deck +297 -0
  18. data/etc/presentations/files.deck +79 -0
  19. data/etc/presentations/icons.deck +22 -0
  20. data/etc/presentations/images.deck +24 -0
  21. data/etc/presentations/key_shortcuts.deck +16 -0
  22. data/etc/presentations/macros.deck +18 -0
  23. data/etc/presentations/menu_classes.deck +44 -0
  24. data/etc/presentations/menu_directories.deck +30 -0
  25. data/etc/presentations/notes.deck +19 -0
  26. data/etc/presentations/other_languages.deck +55 -0
  27. data/etc/presentations/other_wiki_syntaxes.deck +4 -0
  28. data/etc/presentations/piano.deck +5 -0
  29. data/etc/presentations/potential/diffs.deck +38 -0
  30. data/etc/presentations/potential/evolution.deck +18 -0
  31. data/etc/presentations/potential/intro.deck +711 -0
  32. data/etc/presentations/potential/intro1.deck +711 -0
  33. data/etc/presentations/potential/intro2.deck +97 -0
  34. data/etc/presentations/potential/make_mysql_menu.deck +36 -0
  35. data/etc/presentations/potential/ruby_development.deck +17 -0
  36. data/etc/presentations/potential/ui_prototyping.deck +50 -0
  37. data/etc/presentations/potential/web_dev.deck +4 -0
  38. data/etc/presentations/potential/web_development.deck +10 -0
  39. data/etc/presentations/potential/wiki.deck +45 -0
  40. data/etc/presentations/presentations.deck +24 -0
  41. data/etc/presentations/rails_development.deck +29 -0
  42. data/etc/presentations/search_key_shortcuts.deck +37 -0
  43. data/etc/presentations/simplest_possible_ui.deck +37 -0
  44. data/etc/presentations/svg.deck +5 -0
  45. data/etc/presentations/testing.deck +28 -0
  46. data/etc/presentations/the_end.deck +13 -0
  47. data/etc/presentations/type_something_and_double_click.deck +57 -0
  48. data/etc/presentations/type_the_acronym.deck +144 -0
  49. data/etc/presentations/web_browser.deck +56 -0
  50. data/etc/presentations/xiki_command.deck +20 -0
  51. data/etc/presentations/xiki_url.deck +14 -0
  52. data/etc/shark.icns +0 -0
  53. data/etc/shark_script.icns +0 -0
  54. data/etc/snippets/html.notes +7 -0
  55. data/etc/snippets/notes.notes +20 -0
  56. data/etc/snippets/rb.notes +38 -0
  57. data/etc/templates/menu_template.menu +2 -0
  58. data/etc/templates/menu_template.rb +8 -0
  59. data/etc/templates/template.rb +5 -0
  60. data/etc/themes/Dark_Metal.notes +28 -0
  61. data/etc/themes/Orange_Path.notes +15 -0
  62. data/etc/themes/Shiny_Blue.notes +27 -0
  63. data/etc/themes/Shiny_Green.notes +27 -0
  64. data/etc/wrappers/wrapper.js +17 -0
  65. data/etc/wrappers/wrapper.py +20 -0
  66. data/etc/wrappers/wrapper.rb +25 -0
  67. data/lib/block.rb +72 -0
  68. data/lib/bookmarks.rb +352 -0
  69. data/lib/buffers.rb +170 -0
  70. data/lib/clipboard.rb +333 -0
  71. data/lib/code.rb +860 -0
  72. data/lib/code_tree.rb +476 -0
  73. data/lib/color.rb +274 -0
  74. data/lib/console.rb +557 -0
  75. data/lib/control_lock.rb +9 -0
  76. data/lib/control_tab.rb +176 -0
  77. data/lib/core_ext.rb +31 -0
  78. data/lib/cursor.rb +111 -0
  79. data/lib/deletes.rb +65 -0
  80. data/lib/diff_log.rb +297 -0
  81. data/lib/effects.rb +145 -0
  82. data/lib/environment.rb +5 -0
  83. data/lib/file_tree.rb +1875 -0
  84. data/lib/files.rb +334 -0
  85. data/lib/hide.rb +259 -0
  86. data/lib/history.rb +286 -0
  87. data/lib/image.rb +51 -0
  88. data/lib/incrementer.rb +15 -0
  89. data/lib/insert.rb +7 -0
  90. data/lib/irc.rb +22 -0
  91. data/lib/key_bindings.rb +658 -0
  92. data/lib/keys.rb +754 -0
  93. data/lib/launcher.rb +1351 -0
  94. data/lib/line.rb +429 -0
  95. data/lib/links.rb +6 -0
  96. data/lib/location.rb +175 -0
  97. data/lib/macros.rb +48 -0
  98. data/lib/man.rb +19 -0
  99. data/lib/menu.rb +708 -0
  100. data/lib/merb.rb +259 -0
  101. data/lib/message.rb +5 -0
  102. data/lib/meths.rb +56 -0
  103. data/lib/mode.rb +34 -0
  104. data/lib/move.rb +248 -0
  105. data/lib/notes.rb +1000 -0
  106. data/lib/numbers.rb +45 -0
  107. data/lib/ol.rb +203 -0
  108. data/lib/ol_helper.rb +44 -0
  109. data/lib/overlay.rb +167 -0
  110. data/lib/pause_means_space.rb +68 -0
  111. data/lib/php.rb +22 -0
  112. data/lib/projects.rb +21 -0
  113. data/lib/relinquish_exception.rb +2 -0
  114. data/lib/remote.rb +206 -0
  115. data/lib/requirer.rb +46 -0
  116. data/lib/rest_tree.rb +108 -0
  117. data/lib/ruby.rb +57 -0
  118. data/lib/ruby_console.rb +165 -0
  119. data/lib/search.rb +1572 -0
  120. data/lib/search_term.rb +40 -0
  121. data/lib/snippet.rb +68 -0
  122. data/lib/specs.rb +229 -0
  123. data/lib/styles.rb +274 -0
  124. data/lib/svn.rb +682 -0
  125. data/lib/text_util.rb +110 -0
  126. data/lib/tree.rb +1871 -0
  127. data/lib/tree_cursor.rb +87 -0
  128. data/lib/trouble_shooting.rb +27 -0
  129. data/lib/url_tree.rb +11 -0
  130. data/lib/view.rb +1474 -0
  131. data/lib/window.rb +133 -0
  132. data/lib/xiki.rb +404 -0
  133. data/menus/accounts.rb +5 -0
  134. data/menus/address_book.rb +21 -0
  135. data/menus/agenda.rb +28 -0
  136. data/menus/all.rb +5 -0
  137. data/menus/amazon.rb +16 -0
  138. data/menus/app.rb +16 -0
  139. data/menus/applescript.rb +46 -0
  140. data/menus/as.rb +15 -0
  141. data/menus/bookmarklet.rb +63 -0
  142. data/menus/bootstrap.rb +568 -0
  143. data/menus/browse.rb +13 -0
  144. data/menus/browser.rb +78 -0
  145. data/menus/cassandra_db.rb +36 -0
  146. data/menus/chmod.rb +27 -0
  147. data/menus/classes.rb +5 -0
  148. data/menus/coffee_script.rb +35 -0
  149. data/menus/computer.rb +24 -0
  150. data/menus/contacts.rb +5 -0
  151. data/menus/cookies.rb +25 -0
  152. data/menus/couch.rb +184 -0
  153. data/menus/crop.rb +45 -0
  154. data/menus/css.rb +55 -0
  155. data/menus/current.rb +5 -0
  156. data/menus/db.rb +12 -0
  157. data/menus/deck.rb +219 -0
  158. data/menus/dictionary.rb +9 -0
  159. data/menus/dir.rb +8 -0
  160. data/menus/disk.rb +5 -0
  161. data/menus/do.rb +13 -0
  162. data/menus/docs.rb +58 -0
  163. data/menus/dotsies.rb +107 -0
  164. data/menus/edited.rb +18 -0
  165. data/menus/emacs.rb +17 -0
  166. data/menus/enter.rb +13 -0
  167. data/menus/eval.rb +17 -0
  168. data/menus/executable.rb +16 -0
  169. data/menus/filter.rb +46 -0
  170. data/menus/firefox.rb +607 -0
  171. data/menus/foo.rb +30 -0
  172. data/menus/french.rb +7 -0
  173. data/menus/git.rb +185 -0
  174. data/menus/gito.rb +785 -0
  175. data/menus/google.rb +35 -0
  176. data/menus/google_images.rb +11 -0
  177. data/menus/google_patents.rb +10 -0
  178. data/menus/gutenberg.rb +13 -0
  179. data/menus/head.rb +10 -0
  180. data/menus/headings.rb +39 -0
  181. data/menus/html.rb +61 -0
  182. data/menus/icon.rb +40 -0
  183. data/menus/images.menu +2 -0
  184. data/menus/img.rb +15 -0
  185. data/menus/info.rb +9 -0
  186. data/menus/ip.rb +10 -0
  187. data/menus/iterm.rb +36 -0
  188. data/menus/itunes.rb +78 -0
  189. data/menus/javascript.rb +74 -0
  190. data/menus/layout.rb +18 -0
  191. data/menus/local_storage.rb +67 -0
  192. data/menus/ls.rb +19 -0
  193. data/menus/mac.rb +87 -0
  194. data/menus/maps.rb +18 -0
  195. data/menus/matches.rb +18 -0
  196. data/menus/memcache.rb +117 -0
  197. data/menus/mkdir.rb +23 -0
  198. data/menus/mongo.rb +83 -0
  199. data/menus/mysql.rb +294 -0
  200. data/menus/node.rb +88 -0
  201. data/menus/open.rb +19 -0
  202. data/menus/outline.rb +24 -0
  203. data/menus/piano.rb +746 -0
  204. data/menus/postgres.rb +34 -0
  205. data/menus/pre.rb +5 -0
  206. data/menus/python.rb +39 -0
  207. data/menus/rails.rb +160 -0
  208. data/menus/rake.rb +12 -0
  209. data/menus/redmine.rb +168 -0
  210. data/menus/riak_tree.rb +204 -0
  211. data/menus/rss.rb +15 -0
  212. data/menus/safari.rb +11 -0
  213. data/menus/sass.rb +15 -0
  214. data/menus/say.rb +6 -0
  215. data/menus/scale.rb +49 -0
  216. data/menus/serve.rb +78 -0
  217. data/menus/shuffle.rb +24 -0
  218. data/menus/spanish.rb +7 -0
  219. data/menus/standalone.rb +57 -0
  220. data/menus/tail.rb +41 -0
  221. data/menus/technologies.rb +19 -0
  222. data/menus/themes.rb +32 -0
  223. data/menus/thesaurus.rb +13 -0
  224. data/menus/to.rb +24 -0
  225. data/menus/twitter.rb +57 -0
  226. data/menus/wikipedia.rb +34 -0
  227. data/menus/words.rb +11 -0
  228. data/spec/code_tree_spec.rb +59 -0
  229. data/spec/diff_log_spec.rb +40 -0
  230. data/spec/file_tree_spec.rb +102 -0
  231. data/spec/keys_spec.rb +24 -0
  232. data/spec/line_spec.rb +68 -0
  233. data/spec/menu_spec.rb +50 -0
  234. data/spec/ol_spec.rb +98 -0
  235. data/spec/remote_spec.rb +43 -0
  236. data/spec/search_spec.rb +162 -0
  237. data/spec/text_util_spec.rb +119 -0
  238. data/spec/tree_cursor_spec.rb +91 -0
  239. data/spec/tree_spec.rb +955 -0
  240. data/tests/console_test.rb +11 -0
  241. data/tests/couch_db_test.rb +12 -0
  242. data/tests/diff_log_test.rb +43 -0
  243. data/tests/el_mixin.rb +16 -0
  244. data/tests/git_test.rb +95 -0
  245. data/tests/keys_test.rb +19 -0
  246. data/tests/line_test.rb +38 -0
  247. data/tests/merb_test.rb +11 -0
  248. data/tests/redmine_test.rb +50 -0
  249. data/tests/remote_test.rb +31 -0
  250. data/tests/rest_tree_test.rb +70 -0
  251. data/xiki.gemspec +37 -0
  252. metadata +332 -0
@@ -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
@@ -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