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/menus/google.rb
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require "cgi"
|
|
2
|
+
|
|
3
|
+
class Google
|
|
4
|
+
def self.menu *args
|
|
5
|
+
if args.empty? # If no path, pull from history
|
|
6
|
+
return Launcher.last "google", :exclude_path=>1, :quoted=>1
|
|
7
|
+
end
|
|
8
|
+
txt = CGI.escape ENV['txt']
|
|
9
|
+
|
|
10
|
+
$el.browse_url "http://www.google.com/search?q=#{txt}"
|
|
11
|
+
nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.insert
|
|
15
|
+
line = Line.value
|
|
16
|
+
return View << "google/" if line =~ /^$/
|
|
17
|
+
return View << "@google/" if line =~ /^ /
|
|
18
|
+
return View << "google/" if line =~ /^ *- $/
|
|
19
|
+
|
|
20
|
+
View << "google/"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.search txt
|
|
24
|
+
txt = CGI.escape txt
|
|
25
|
+
Browser.url "http://www.google.com/search?q=#{txt}"
|
|
26
|
+
nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.maps txt
|
|
30
|
+
txt = CGI.escape txt
|
|
31
|
+
Browser.url "http://maps.google.com/maps?q=#{txt}"
|
|
32
|
+
nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class GoogleImages
|
|
2
|
+
def self.menu *args
|
|
3
|
+
return View.prompt "Type something to google image search for" if args.blank?
|
|
4
|
+
url = "https://www.google.com/search?tbm=isch&q=#{CGI.escape ENV['txt']}"
|
|
5
|
+
|
|
6
|
+
# If up+..., just return url
|
|
7
|
+
return "@ #{url}" if Keys.up?
|
|
8
|
+
|
|
9
|
+
Firefox.url url
|
|
10
|
+
end
|
|
11
|
+
end
|
data/menus/gutenberg.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class Gutenberg
|
|
2
|
+
def self.menu *args
|
|
3
|
+
arg = args.any? ? args.join("/") : nil
|
|
4
|
+
|
|
5
|
+
return View.prompt('Type a search phrase') if arg.nil?
|
|
6
|
+
|
|
7
|
+
arg.sub! /^\| ?/, ''
|
|
8
|
+
return View.prompt "Type something to google gutenberg search for" if arg.nil?
|
|
9
|
+
|
|
10
|
+
url = "http://www.gutenberg.org/ebooks/search.html/?format=html&default_prefix=all&sort_order=downloads&query=#{CGI.escape arg}"
|
|
11
|
+
Browser.url url
|
|
12
|
+
end
|
|
13
|
+
end
|
data/menus/head.rb
ADDED
data/menus/headings.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'view'
|
|
2
|
+
require 'line'
|
|
3
|
+
require 'effects'
|
|
4
|
+
|
|
5
|
+
class Headings
|
|
6
|
+
|
|
7
|
+
def self.menu target=nil, line=nil
|
|
8
|
+
todo = Bookmarks['$t']
|
|
9
|
+
|
|
10
|
+
# If no target, tell them to enter one
|
|
11
|
+
if target.nil?
|
|
12
|
+
return View.prompt "Type a heading to search for"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# If no line, search for headings
|
|
16
|
+
if line.nil?
|
|
17
|
+
txt = IO.read(todo)
|
|
18
|
+
sections = txt.split(/^> /, -1)
|
|
19
|
+
sections = sections.select{|o|
|
|
20
|
+
# Check just first line
|
|
21
|
+
o[/.*/] =~ /#{Regexp.quote target}/i
|
|
22
|
+
}
|
|
23
|
+
return sections.map{|o| "> #{o.strip}\n\n"}.join("").gsub(/^/, '| ').gsub(/^\| $/, '|')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Launched quoted line, so jump to it
|
|
27
|
+
|
|
28
|
+
line = Line.value
|
|
29
|
+
|
|
30
|
+
find = line.sub /^ \| /, ''
|
|
31
|
+
View.open todo
|
|
32
|
+
View.to_top
|
|
33
|
+
Search.forward "^#{$el.regexp_quote(find)}$"
|
|
34
|
+
Line.to_left
|
|
35
|
+
View.recenter_top
|
|
36
|
+
Effects.blink(:what=>:line)
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
data/menus/html.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
class Html
|
|
2
|
+
def self.menu *args
|
|
3
|
+
|
|
4
|
+
return Tree.<< Dom.dom(:prefix=>"all") if Keys.prefix == "all"
|
|
5
|
+
return Tree.<< Dom.dom(:prefix=>"outline") if Keys.prefix == "outline"
|
|
6
|
+
|
|
7
|
+
prefix = Keys.prefix :clear=>1
|
|
8
|
+
|
|
9
|
+
# If as+open, or launched line without slash, render in browser...
|
|
10
|
+
|
|
11
|
+
if prefix == "open" || (Line !~ /\/$/ && Line =~ /^ /)
|
|
12
|
+
orig = Location.new
|
|
13
|
+
Tree.to_root
|
|
14
|
+
txt = Tree.children :string=>1, :cross_blank_lines=>1
|
|
15
|
+
orig.go
|
|
16
|
+
txt = txt.unindent
|
|
17
|
+
|
|
18
|
+
# Convert from tree to html if any ident, or 1st line doesn't start with "|"
|
|
19
|
+
txt = txt =~ /^ / || txt !~ /\A\|/ ?
|
|
20
|
+
Tree.to_html(txt) :
|
|
21
|
+
txt.gsub(/^\| ?/, '')
|
|
22
|
+
|
|
23
|
+
return Browser.html txt
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Suggest relevant elements...
|
|
27
|
+
|
|
28
|
+
last = args.last
|
|
29
|
+
if filler = @@filler[last]
|
|
30
|
+
Line.add_slash :txt=>filler, :left=>1
|
|
31
|
+
elsif args == []
|
|
32
|
+
['html/', 'div/', 'style/']
|
|
33
|
+
elsif last == 'html'
|
|
34
|
+
['head/', 'body/']
|
|
35
|
+
elsif last == 'head'
|
|
36
|
+
"- title/\n- style/\n| <script src='http://code.jquery.com/jquery.min.js'></script>"
|
|
37
|
+
elsif last == 'style'
|
|
38
|
+
"
|
|
39
|
+
| body {
|
|
40
|
+
| font-family: arial;
|
|
41
|
+
| margin: 50px;
|
|
42
|
+
| }
|
|
43
|
+
"
|
|
44
|
+
elsif last == 'body'
|
|
45
|
+
['div/']
|
|
46
|
+
else
|
|
47
|
+
['h1/Info', 'p/lorem ipsum...']
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def initialize txt
|
|
52
|
+
@txt = txt
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
@@filler = {
|
|
56
|
+
"h1"=>"Info",
|
|
57
|
+
"title"=>"Welcome",
|
|
58
|
+
"p"=>"Lorem ipsum...",
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
end
|
data/menus/icon.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class Icon
|
|
2
|
+
def self.menu name=nil, choice=nil
|
|
3
|
+
Ol << "name: #{name.inspect}"
|
|
4
|
+
|
|
5
|
+
name = choice if name == "recent" && choice
|
|
6
|
+
|
|
7
|
+
# If they picked recent/, just list icons
|
|
8
|
+
|
|
9
|
+
return Launcher.last "", :omit=>'icon' if name == "recent"
|
|
10
|
+
|
|
11
|
+
# If nothing, show main options
|
|
12
|
+
|
|
13
|
+
if name.nil?
|
|
14
|
+
last = Launcher.last "", :omit=>'icon'
|
|
15
|
+
most_recent = last[/^- (.+?)\//, 1]
|
|
16
|
+
|
|
17
|
+
return "
|
|
18
|
+
| Make an icon for which menu? Use one of these options:
|
|
19
|
+
- type menu name here) #{most_recent}
|
|
20
|
+
- recent/
|
|
21
|
+
"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Name passed so create menu
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
dir = Tree.dir :or=>:desktop
|
|
28
|
+
# dir = Tree.dir || File.expand_path("~/Desktop")
|
|
29
|
+
Ol << "dir: #{dir.inspect}"
|
|
30
|
+
|
|
31
|
+
path = "#{dir}/#{name}.xiki"
|
|
32
|
+
File.open(path, "w") { |f| f << "\n" }
|
|
33
|
+
Files.open_in_window path
|
|
34
|
+
|
|
35
|
+
Ol << "!"
|
|
36
|
+
# ".flash - created '#{name}' icon!"
|
|
37
|
+
"- created '#{name}' icon!"
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
data/menus/images.menu
ADDED
data/menus/img.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Img
|
|
2
|
+
def self.menu *args
|
|
3
|
+
|
|
4
|
+
path = args.join('/')
|
|
5
|
+
|
|
6
|
+
column = Line.indent.length
|
|
7
|
+
Line.sub! /^([ +-]*).*/, "\\1"
|
|
8
|
+
Move.to_end
|
|
9
|
+
|
|
10
|
+
at = column > 0 ? "@" : ""
|
|
11
|
+
Image.<< path, "#{at}img/#{path}"
|
|
12
|
+
Move.to_column column
|
|
13
|
+
nil
|
|
14
|
+
end
|
|
15
|
+
end
|
data/menus/info.rb
ADDED
data/menus/ip.rb
ADDED
data/menus/iterm.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class Iterm
|
|
2
|
+
def self.menu *args
|
|
3
|
+
|
|
4
|
+
# If no arg, prompt to type something
|
|
5
|
+
|
|
6
|
+
return View.prompt "Type something to run in iTerm" if args.empty?
|
|
7
|
+
|
|
8
|
+
txt = args.join('/')
|
|
9
|
+
|
|
10
|
+
return self.command("activate") if txt == "start"
|
|
11
|
+
return self.command("quit") if txt == "quit"
|
|
12
|
+
|
|
13
|
+
self.run txt.sub(/^\| /, '')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.command txt
|
|
17
|
+
$el.do_applescript %`
|
|
18
|
+
#{txt} application "iTerm"
|
|
19
|
+
`
|
|
20
|
+
return nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.run txt, options={}
|
|
24
|
+
$el.do_applescript %`
|
|
25
|
+
tell application "iTerm"
|
|
26
|
+
#{options[:activate] ? 'activate' : ''}
|
|
27
|
+
tell the first terminal
|
|
28
|
+
tell the last session
|
|
29
|
+
write text "#{txt}"
|
|
30
|
+
end tell
|
|
31
|
+
end tell
|
|
32
|
+
end tell
|
|
33
|
+
`
|
|
34
|
+
nil
|
|
35
|
+
end
|
|
36
|
+
end
|
data/menus/itunes.rb
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
class Itunes
|
|
2
|
+
def self.menu
|
|
3
|
+
"
|
|
4
|
+
- .play/
|
|
5
|
+
- .pause/
|
|
6
|
+
- .next/
|
|
7
|
+
- .previous/
|
|
8
|
+
- .artists/
|
|
9
|
+
- .songs/
|
|
10
|
+
- .playlist/
|
|
11
|
+
- api/
|
|
12
|
+
> Play a song
|
|
13
|
+
@ Itunes.songs 'Thunderstorm'
|
|
14
|
+
|
|
|
15
|
+
- docs/
|
|
16
|
+
| Play specific song
|
|
17
|
+
@itunes/songs/Around the Fur
|
|
18
|
+
|
|
|
19
|
+
| Play a playlist
|
|
20
|
+
@itunes/playlist/class
|
|
21
|
+
"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.songs name=nil
|
|
25
|
+
|
|
26
|
+
# If nothing passed, list all songs
|
|
27
|
+
if name.nil?
|
|
28
|
+
tracks = Applescript.run "iTunes", "get the name of every track of library playlist 1"
|
|
29
|
+
tracks = JSON[tracks.sub(/^\{(.+)\}$/, "[\\1]")]
|
|
30
|
+
return tracks.sort.uniq.select{|o| o != "" && o !~ /^ /}.map{|o| "- #{o}/\n"}.join
|
|
31
|
+
return
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Applescript.run "iTunes", "play track \"#{name}\""
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.playlist name=nil
|
|
39
|
+
return View.prompt("Enter a name") if name.nil?
|
|
40
|
+
Applescript.run "iTunes", "play playlist \"#{name}\""
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.play
|
|
44
|
+
Applescript.run "iTunes", "play"
|
|
45
|
+
end
|
|
46
|
+
def self.pause
|
|
47
|
+
Applescript.run "iTunes", "pause"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.next
|
|
51
|
+
Applescript.run "iTunes", "next track"
|
|
52
|
+
end
|
|
53
|
+
def self.previous
|
|
54
|
+
Applescript.run "iTunes", "previous track"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.artists artist=nil, track=nil
|
|
58
|
+
|
|
59
|
+
# If nothing passed, list artists
|
|
60
|
+
|
|
61
|
+
if artist.nil?
|
|
62
|
+
artists = Applescript.run "iTunes", 'get the artist of every track of library playlist 1'
|
|
63
|
+
artists = JSON[artists.sub(/^\{(.+)\}$/, "[\\1]")]
|
|
64
|
+
return artists.sort.uniq.select{|o| o != ""}.map{|o| "- #{o}/\n"}.join
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# If just artist passed, list artists
|
|
68
|
+
|
|
69
|
+
if track.nil?
|
|
70
|
+
tracks = Applescript.run "iTunes", "get the name of every track of library playlist 1 whose artist is \"#{artist}\""
|
|
71
|
+
tracks = JSON[tracks.sub(/^\{(.+)\}$/, "[\\1]")]
|
|
72
|
+
return tracks.sort.uniq.select{|o| o != ""}.map{|o| "- #{o}/\n"}.join
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
self.songs track
|
|
76
|
+
".flash - Playing!"
|
|
77
|
+
end
|
|
78
|
+
end
|
data/menus/javascript.rb
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
class Javascript
|
|
2
|
+
|
|
3
|
+
def self.menu
|
|
4
|
+
"
|
|
5
|
+
| See
|
|
6
|
+
@js/
|
|
7
|
+
"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.run
|
|
11
|
+
|
|
12
|
+
Block.do_as_something do |txt|
|
|
13
|
+
|
|
14
|
+
txt << "
|
|
15
|
+
function p(txt) {
|
|
16
|
+
print(JSON.stringify(txt));
|
|
17
|
+
}";
|
|
18
|
+
|
|
19
|
+
result = self.run_internal txt
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.run_internal txt
|
|
24
|
+
|
|
25
|
+
# Write to temp file
|
|
26
|
+
File.open("/tmp/tmp.js", "w") { |f| f << txt }
|
|
27
|
+
# Call js
|
|
28
|
+
Console.run "js /tmp/tmp.js", :sync=>true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.launch
|
|
32
|
+
line = Line.without_label
|
|
33
|
+
result = self.run_internal line
|
|
34
|
+
Tree.under result, :escape=>'', :no_slash=>1
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.enter_as_jquery
|
|
38
|
+
clip = Clipboard.get(0)
|
|
39
|
+
insert_this = clip =~ /^[a-z_.#]+$/ ? clip : ""
|
|
40
|
+
|
|
41
|
+
if Keys.prefix_u?
|
|
42
|
+
View.insert "$(\"#{insert_this}\")"
|
|
43
|
+
Search.backward '"'
|
|
44
|
+
return
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
View.insert "- js/$(\"#{insert_this}\").blink()"
|
|
48
|
+
Search.backward '"'
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.wrap_jquery_load txt, url=nil
|
|
53
|
+
|
|
54
|
+
url ||= "http://code.jquery.com/jquery.min.js"
|
|
55
|
+
|
|
56
|
+
txt = "
|
|
57
|
+
var f = function(){
|
|
58
|
+
#{txt}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
if(typeof($) == 'undefined') {
|
|
62
|
+
var s = document.createElement('script');
|
|
63
|
+
s.src = '#{url}';
|
|
64
|
+
s.onload = f;
|
|
65
|
+
document.getElementsByTagName('head')[0].appendChild(s);
|
|
66
|
+
}else{
|
|
67
|
+
f();
|
|
68
|
+
}
|
|
69
|
+
".unindent
|
|
70
|
+
|
|
71
|
+
txt
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|