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,259 @@
1
+ Xiki = {};
2
+ if(typeof(exports) == "undefined"){
3
+ exports = Xiki;
4
+ }
5
+
6
+ exports.children = function(tree, target) {
7
+ console.log("target:", target);
8
+
9
+ target = target.replace(/^\//, '');
10
+ target = target.replace(/\/$/, '');
11
+
12
+ var found=null, result="";
13
+ if(target == "") found = -1;
14
+
15
+ exports.traverse(tree, function(branch, path){
16
+
17
+ if(found == null) {
18
+ var target_match = exports.target_match(path, target);
19
+
20
+ if(target_match == 'same' || target_match == 'same'){
21
+ found = branch.length - 1; // Remember indent
22
+ }
23
+
24
+ }else{
25
+
26
+ current_indent = branch.length - 1;
27
+
28
+ // If found and still indented one deeper
29
+ if(current_indent == found + 1) {
30
+ var item = branch[branch.length-1];
31
+ if(item.match(/\/$/)) item = item.replace(/^- /, '+ ');
32
+ item = item.replace(/^([+-] )?\./, "$1")
33
+ result += item+"\n"; // Output
34
+ }else{ // Otherwise, stop looking for children if indent is less
35
+ if(current_indent <= found) found = null;
36
+ }
37
+ }
38
+
39
+ });
40
+
41
+ return result;
42
+ };
43
+
44
+
45
+ exports.target_match = function(path, target) {
46
+
47
+ var pi=0, ti=0;
48
+
49
+ while(true){
50
+ var pathi=path[pi], targeti=target[ti];
51
+
52
+ if(! pathi || ! targeti){
53
+ if(!pathi && !targeti) return 'same'; // Handles a, a and a/, a/
54
+ if(!pathi && !target[ti+1] && targeti == "/") return 'same'; // Handles a, a/
55
+ if(!targeti && !path[pi+1] && pathi == "/") return 'same' // Handles a/, a
56
+ if(pathi && (pathi == "/" || path[pi-1] == "/" || pi == 0)) return 'shorter'
57
+ if(targeti && (targeti == "/" || target[ti-1] == "/" || ti == 0)) return 'longer'
58
+ return null; // At end of one, but no match
59
+ }
60
+
61
+ if(pathi == targeti){ // If chars equal, increment
62
+ pi += 1;
63
+ ti += 1;
64
+ continue;
65
+ }else if(pathi == "." && (path[pi-1] == "/" || pi == 0) && (target[ti-1] == "/" || ti == 0)){
66
+ pi += 1;
67
+ continue;
68
+ }
69
+
70
+ break; // Not found
71
+ }
72
+
73
+ return null;
74
+ }
75
+
76
+ exports.traverse = function(tree, callback) {
77
+ var branch=[], indent=0;
78
+
79
+ tree = tree.split("\n");
80
+ for(var i=0; i < tree.length; i++) {
81
+ var line = tree[i];
82
+ if(line == "") continue;
83
+ var line_indent = String(line.match(/^ */)).length / 2;
84
+
85
+ line = line.replace(/^ */, '');
86
+
87
+ branch[line_indent] = line;
88
+
89
+ if(line_indent < indent) {
90
+ branch = branch.slice(0, line_indent+1);
91
+ }
92
+
93
+ var path = branch.join('').replace(/(^|\/)[+-] /g, "$1");
94
+
95
+ callback(branch, path);
96
+
97
+ indent = line_indent;
98
+ }
99
+ }
100
+
101
+ exports.unindent = function(txt) {
102
+
103
+ txt = txt.replace(/^\n/, ''); // Delete initial blank line if there
104
+
105
+ // If 1st line has no indent and 2nd line has indent (at least 3 spaces)
106
+ if(!txt.match(/^ /) && txt.match(/^.+\n( +)/)){
107
+ txt = txt.replace(/^\n/, ''); // Delete initial blank line if there
108
+ var indent = txt.match(/^.+\n( +)/)[1];
109
+ return txt.replace(new RegExp("^"+indent, "gm"), '');
110
+ }
111
+
112
+ var old_indent = txt.match(/^ */); // Get indent of first line
113
+ txt = txt.replace(new RegExp("^"+old_indent, "gm"), ''); // Delete current indent
114
+ txt = txt.replace(/\n+$/g, '');
115
+
116
+ return txt;
117
+ }
118
+
119
+ exports.header_html = function(title) {
120
+
121
+ return '<div data-role="header">\n\
122
+ <h1>'+title+'</h1>\n\
123
+ <a data-rel="back" href="#" data-icon="arrow-l" class="ui-btn-left">Back</a>\n\
124
+ <a href="#home" data-icon="home" class="ui-btn-right">Home</a>\n\
125
+ </div>';
126
+
127
+ }
128
+
129
+ exports.render_mobile_standalone = function(tree, target) {
130
+ return '\
131
+ <div data-role="page">\n\
132
+ '+exports.header_html("Menu")+'\n\
133
+ <div data-role="content">\n\
134
+ </div>\n\
135
+ </div>\n\
136
+ '
137
+ }
138
+
139
+ exports.render_mobile_ajax = function(tree, target) {
140
+
141
+ return '\
142
+ <html>\n\
143
+ <head>\n\
144
+ <meta name="viewport" content="width=device-width, initial-scale=1">\n\
145
+ <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />\n\
146
+ <script src="/js/xiki.js"></script>\n\
147
+ <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>\n\
148
+ <script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>\n\
149
+ </head>\n\
150
+ <body>\n\
151
+ <div data-role="page">\n\
152
+ '+exports.header_html("Menu")+'\n\
153
+ <div data-role="content">\n\
154
+ </div>\n\
155
+ </div>\n\
156
+ \n\
157
+ <script>\n\
158
+ $(function(){\n\
159
+ Xiki.ajax_setup();\n\
160
+ })\n\
161
+ </script>\n\
162
+ </body>\n\
163
+ </html>\n\
164
+ '
165
+ }
166
+
167
+ exports.ajax_setup = function() {
168
+
169
+ $.get("/", {}, function(txt){
170
+ var html = Xiki.children_to_html(txt);
171
+
172
+ $("div[data-role=content]").html(html).trigger("create");
173
+ });
174
+
175
+
176
+ $(document).bind("pagebeforechange", function(e, data) {Xiki.navigate_ajax(e, data)});
177
+ }
178
+
179
+ exports.navigate_ajax = function(e, data) {
180
+
181
+ if(typeof data.toPage != "string") return;
182
+
183
+ var hash_orig = data.toPage.replace(/.+?(#|$)/, '');
184
+ var hash = hash_orig.replace(/,/g, '/');
185
+
186
+ $.get("/"+hash, {}, function(txt){
187
+ Xiki.navigate(e, data, txt)
188
+ });
189
+ }
190
+
191
+ exports.navigate = function(e, data, children) {
192
+
193
+ if(typeof data.toPage != "string") return;
194
+
195
+ var hash_orig = data.toPage.replace(/.+?(#|$)/, '');
196
+ var hash = hash_orig.replace(/,/g, '/');
197
+ label = hash.replace(/.+\//, '');
198
+ label = label.replace(/\b\w/g, function(m){return m.toUpperCase()});
199
+
200
+ var options = data.options;
201
+
202
+ if(hash_orig == "home"){
203
+ hash_orig = hash = "";
204
+ label = "Menu";
205
+ options.reverse = true;
206
+ }
207
+
208
+ var html = Xiki.children_to_html(children, hash_orig);
209
+
210
+ // TODO: remove page if back button?
211
+
212
+ options.dataUrl = "#"+hash;
213
+
214
+ // Add new page to the dom!
215
+
216
+ var page_html = '<div id="'+hash+'" data-role="page">\
217
+ '+exports.header_html(label)+'\n\
218
+ <div data-role="content">'+html+'</div></div>';
219
+
220
+ $("body").append(page_html);
221
+ var page = $("div[data-role=page]:last");
222
+
223
+ $.mobile.changePage(page, options);
224
+
225
+ e.preventDefault();
226
+ }
227
+
228
+ exports.children_to_html = function(txt, parent) {
229
+
230
+ var html = "";
231
+
232
+ // If it starts with bullet, treat them all as li
233
+ if(txt.match(/^[+-] /)){
234
+ html += '<ul data-role="listview" data-inset="true">';
235
+
236
+ $.each(txt.split("\n"), function(i, item){
237
+ if(! item) return;
238
+ item = item.replace(/^[+-] /, "")
239
+ item = item.replace(/\/$/, "");
240
+ upper = item.replace(/\b\w/g, function(m){return m.toUpperCase()});
241
+
242
+ var href = item;
243
+ if(parent) href = parent+","+href;
244
+
245
+ html += '<li><a href="#'+href+'">'+upper+'</a></li>';
246
+ })
247
+ html += "</ul>"
248
+ }else{
249
+ html += '<div style="margin:20px;">'
250
+ txt = txt.replace(/^\| ?/gm, "");
251
+ txt = txt.replace(/^> (.+)/gm, '<div style="font-weight:bold; margin-bottom:5px; font-size:20px">$1</div>');
252
+ txt = txt.replace(/$/gm, "<br>");
253
+ txt = txt.replace(/div><br>$/gm, "div>");
254
+ html += txt;
255
+ html += "</div>"
256
+ }
257
+
258
+ return html;
259
+ }
Binary file
@@ -0,0 +1,5 @@
1
+ > Demo
2
+
3
+ bootstrap
4
+
5
+
@@ -0,0 +1,41 @@
1
+ > Browse databases
2
+
3
+ databases/
4
+
5
+
6
+ > Mysql
7
+
8
+ - explore
9
+
10
+ mysql/
11
+
12
+
13
+ > Mysql
14
+
15
+ select * from
16
+
17
+
18
+
19
+ > Mongo
20
+
21
+ - explore
22
+
23
+ mongo/
24
+ - collections/
25
+ + docs/
26
+
27
+
28
+ > Memcached
29
+
30
+ - explore
31
+
32
+ memcache/
33
+
34
+
35
+ > HTML5 local storage
36
+
37
+ - explore
38
+
39
+ local storage/
40
+
41
+
@@ -0,0 +1,23 @@
1
+ > Difflog
2
+
3
+ - Diffs of every change you make is saved
4
+
5
+ - key: open+difflog
6
+
7
+
8
+ > Edits to one file or dir
9
+
10
+ - key: search+edits
11
+
12
+
13
+ > Edits since backup
14
+
15
+ - Make backup: as+version
16
+
17
+ - key: do+compare+last
18
+
19
+
20
+ > Diff of unsaved files
21
+
22
+ - Show all changes not saved: open+not+saved
23
+
@@ -0,0 +1,14 @@
1
+ > Documentation is merged with menus
2
+
3
+ - Example:
4
+ piano/
5
+
6
+
7
+ > Docs for all of xiki
8
+
9
+ docs/
10
+
11
+
12
+ > Docs for all of xiki
13
+
14
+ http://xiki/docs
@@ -0,0 +1,5 @@
1
+ > Demo menu
2
+
3
+ effects/
4
+
5
+
@@ -0,0 +1,297 @@
1
+ > Summary
2
+
3
+ http://xiki.org
4
+
5
+
6
+ > Summary
7
+
8
+ http://xiki.org
9
+
10
+ - Interact with the browser
11
+
12
+
13
+ > Summary
14
+
15
+ http://xiki.org
16
+
17
+ - Interact with the browser
18
+ - Make user interfaces
19
+
20
+
21
+ > Demo
22
+
23
+ face/
24
+ + complexion/
25
+ + eyes/
26
+ - hair/
27
+ - conservative/
28
+ - futuristic/
29
+ - unicorn/
30
+ + reset/
31
+
32
+ > Code
33
+
34
+ - ~/menus/
35
+ + face.menu
36
+
37
+
38
+ > Code
39
+
40
+ - ~/menus/
41
+ + face.menu
42
+ + face.rb
43
+
44
+
45
+ > Make simple menu
46
+
47
+ - dumbed-down version
48
+
49
+ mood/
50
+
51
+
52
+ > Make simple menu
53
+
54
+ - dumbed-down version
55
+
56
+ mood/
57
+ happy/
58
+ sad/
59
+
60
+
61
+ > Make simple menu
62
+
63
+ - dumbed-down version
64
+
65
+ mood/
66
+ happy/
67
+ :)
68
+ sad/
69
+
70
+
71
+ > Make simple menu
72
+
73
+ - dumbed-down version
74
+
75
+ mood/
76
+ happy/
77
+ :)
78
+ sad/
79
+ :(
80
+
81
+
82
+ > Make simple menu
83
+
84
+ - dumbed-down version
85
+
86
+ mood/
87
+ happy/
88
+ :)
89
+ sad/
90
+ :(
91
+
92
+ Browser.html ":)"
93
+
94
+
95
+ > Make simple menu
96
+
97
+ - dumbed-down version
98
+
99
+ - ~/menus/
100
+ + mood.menu
101
+
102
+
103
+ > Make simple menu
104
+
105
+ - dumbed-down version
106
+
107
+ - ~/menus/
108
+ + mood.menu
109
+ + mood.rb
110
+
111
+
112
+ > Make simple menu
113
+
114
+ - dumbed-down version
115
+
116
+ - ~/menus/
117
+ - mood.menu
118
+ | happy/
119
+ | sad/
120
+ + mood.rb
121
+
122
+
123
+ > Make simple menu
124
+
125
+ - dumbed-down version
126
+
127
+ - ~/menus/
128
+ - mood.menu
129
+ | happy/
130
+ | sad/
131
+ - mood.rb
132
+ | class Moods
133
+ | def self.menu mood
134
+ | if mood == "happy"
135
+ | Browser.html ":)"
136
+ | else
137
+ | Browser.html ":("
138
+ | end
139
+ | end
140
+ | end
141
+
142
+
143
+ > Make simple menu
144
+
145
+ - "Pretend like it works"
146
+
147
+
148
+ > Make simple menu
149
+
150
+ mood/
151
+ + happy/
152
+ + sad/
153
+
154
+ - /Users/craig/menus/
155
+ - mood.menu
156
+ | - happy/
157
+ | - sad/
158
+
159
+
160
+ > Make menus do something
161
+
162
+ - "Pretend like it works"
163
+
164
+
165
+ > Make menus do something
166
+
167
+ mood/
168
+ - happy/
169
+ - sad/
170
+
171
+
172
+ > Other ways to make menus
173
+
174
+ - /Users/craig/menus/
175
+ + mood.menu
176
+ + mood.rb
177
+
178
+
179
+ > Just menu
180
+
181
+ sleep/
182
+ - status/
183
+ @ Browser.html "| ( asleep"
184
+ @ Browser.html "8( awake"
185
+
186
+
187
+ > Just menu
188
+
189
+ sleep/
190
+ + status/
191
+ - pictures/
192
+ @google images/sleep/
193
+
194
+
195
+ > Other ways to make menus
196
+
197
+ - /Users/craig/menus/
198
+ + mood.menu
199
+ + mood.rb
200
+
201
+
202
+ > Just class
203
+ class States
204
+ def self.favorite
205
+ "
206
+ - Arizado/
207
+ - South Alacheussets/
208
+ "
209
+ end
210
+ def self.time_zones
211
+ "I don't know any"
212
+ end
213
+ end
214
+
215
+ states/
216
+
217
+
218
+ > Just class
219
+ class Addresses
220
+ def self.menu
221
+ "
222
+ .states/
223
+ - Ohio/
224
+ - California/
225
+ - Florida/
226
+ .zip codes/
227
+ "
228
+ end
229
+ def self.states state
230
+ "Abbreviation: #{state[/../].upcase}"
231
+ end
232
+ end
233
+
234
+ addresses/
235
+ states/
236
+ - Ohio/
237
+ Abbreviation: OH
238
+ + California/
239
+ + Florida/
240
+ zip codes/
241
+
242
+
243
+ > Blocks
244
+
245
+ Menu.abc { |path| "You passed '#{path}'" }
246
+
247
+ abc/
248
+ You passed 'abc/'
249
+
250
+ hey/
251
+ You passed 'abc/hey/'
252
+
253
+
254
+ > Patterns
255
+
256
+ Launcher.add(/^aaa/) { Tree << "hi" }
257
+
258
+ aaaah/
259
+ hi
260
+
261
+
262
+ > Other things in menus
263
+
264
+ - Headings and notes
265
+
266
+ food/
267
+ > Lunch
268
+ @google images/salad
269
+
270
+ > Dinner
271
+ @google images/pizza
272
+
273
+ - todo/
274
+ > Breakfast
275
+ Decide what to do about
276
+ breakfast!
277
+
278
+ > Shell commands
279
+
280
+ disk usage/
281
+ > Disk usage on all volumes
282
+ @ $ df
283
+ | Filesystem 512-blocks Used Available Capacity Mounted on
284
+ | /dev/disk0s2 583197008 217048744 365636264 38% /
285
+ | devfs 215 215 0 100% /dev
286
+ | /dev/disk0s3 392642192 590536 392051656 1% /Volumes/Ashbury
287
+ | map -hosts 0 0 0 100% /net
288
+ | map auto_home 0 0 0 100% /home
289
+
290
+
291
+ > The End
292
+
293
+ "Like a Shell Terminal but Better"
294
+
295
+ http://xiki.org
296
+
297
+