sakuric 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (407) hide show
  1. data/CHANGELOG +13 -0
  2. data/Gemfile +22 -0
  3. data/Gemfile.lock +60 -0
  4. data/HISTORY.yml +13 -0
  5. data/INSTALL +5 -0
  6. data/LICENSE +1 -0
  7. data/Makefile +19 -0
  8. data/Manifest +405 -0
  9. data/README.md +72 -0
  10. data/Rakefile +4 -0
  11. data/TODO +3 -0
  12. data/VERSION +1 -0
  13. data/bashrc +30 -0
  14. data/bashrc.d/00-functions.include +7 -0
  15. data/bashrc.d/01-sakura_checks.include +15 -0
  16. data/bashrc.d/02-uname.include +11 -0
  17. data/bashrc.d/80-ruby.include +4 -0
  18. data/bashrc.d/99-dirs.include +11 -0
  19. data/bashrc.d/aliases.include +20 -0
  20. data/bashrc.d/common.include +7 -0
  21. data/bashrc.d/local.d/README +1 -0
  22. data/bashrc.d/local.d/nothing.include +0 -0
  23. data/bashrc.d/uname.d/Darwin +6 -0
  24. data/bashrc.d/uname.d/Linux +0 -0
  25. data/bashrc.local.sample +11 -0
  26. data/bin/10 +7 -0
  27. data/bin/10times +7 -0
  28. data/bin/1every +22 -0
  29. data/bin/1everyN +22 -0
  30. data/bin/1suN +22 -0
  31. data/bin/2 +5 -0
  32. data/bin/act +24 -0
  33. data/bin/amarelo +2 -0
  34. data/bin/arancio +4 -0
  35. data/bin/arcobaleno +10 -0
  36. data/bin/bianco +3 -0
  37. data/bin/black +2 -0
  38. data/bin/brew-install +3 -0
  39. data/bin/cache +50 -0
  40. data/bin/cache3 +50 -0
  41. data/bin/cheorae +4 -0
  42. data/bin/colorastdouterr +37 -0
  43. data/bin/cp2desktop +3 -0
  44. data/bin/create-git-repo.sh +24 -0
  45. data/bin/csoe +37 -0
  46. data/bin/data +3 -0
  47. data/bin/derive +90 -0
  48. data/bin/dimmi +31 -0
  49. data/bin/dimmiora +4 -0
  50. data/bin/doppioni +48 -0
  51. data/bin/du- +9 -0
  52. data/bin/duplicates +48 -0
  53. data/bin/echodo +7 -0
  54. data/bin/ensure_line_present +82 -0
  55. data/bin/epoch2date +5 -0
  56. data/bin/fanout +100 -0
  57. data/bin/find-broken-symlink +26 -0
  58. data/bin/find-duplicates +48 -0
  59. data/bin/find-special-chars-within-filenames +12 -0
  60. data/bin/fix-terminal +5 -0
  61. data/bin/gce-create-centos-instance +5 -0
  62. data/bin/gce-create-custom-image +8 -0
  63. data/bin/gce-curl-get-instances-for-project +7 -0
  64. data/bin/gce-get-token +3 -0
  65. data/bin/gce-getproject-metadata +35 -0
  66. data/bin/gce-public-ip +4 -0
  67. data/bin/gcutil-fetch +36 -0
  68. data/bin/giallo +2 -0
  69. data/bin/git-clone-in-non-empty-dir +21 -0
  70. data/bin/git-ignore +3 -0
  71. data/bin/git-repos +98 -0
  72. data/bin/git-repos.py +99 -0
  73. data/bin/gitinfo +2 -0
  74. data/bin/google-spreadsheet-cat +40 -0
  75. data/bin/google_ips +5 -0
  76. data/bin/gray +3 -0
  77. data/bin/green +2 -0
  78. data/bin/grigio +3 -0
  79. data/bin/gsutil-debug-bucket +12 -0
  80. data/bin/gsutil-get-oauth2-token +4 -0
  81. data/bin/gugol-image +74 -0
  82. data/bin/hamachi-ubuntu-install +17 -0
  83. data/bin/head-1^-1 +5 -0
  84. data/bin/ifdownup +13 -0
  85. data/bin/immature/ok2 +25 -0
  86. data/bin/immature/twice-still-broken +9 -0
  87. data/bin/install-gic-repo +13 -0
  88. data/bin/install-sakura-on-debian-latest +6 -0
  89. data/bin/iphoto_big_files.sh +37 -0
  90. data/bin/itunes +140 -0
  91. data/bin/jason-xpath.rb +54 -0
  92. data/bin/jsawk +1128 -0
  93. data/bin/json-xpath.rb +54 -0
  94. data/bin/keepup +13 -0
  95. data/bin/lsof-top10 +3 -0
  96. data/bin/minicook +218 -0
  97. data/bin/mv2. +2 -0
  98. data/bin/mv2desktop +2 -0
  99. data/bin/mv2dropbox +2 -0
  100. data/bin/mv2here +2 -0
  101. data/bin/mvto +39 -0
  102. data/bin/nero +2 -0
  103. data/bin/never_as_root +18 -0
  104. data/bin/not +16 -0
  105. data/bin/ok +42 -0
  106. data/bin/orange +4 -0
  107. data/bin/pink +2 -0
  108. data/bin/polygen-dell +7 -0
  109. data/bin/polygen-heanet +6 -0
  110. data/bin/polygen-labs +4 -0
  111. data/bin/print_key_val +4 -0
  112. data/bin/rainbow +10 -0
  113. data/bin/recipe +19 -0
  114. data/bin/red +2 -0
  115. data/bin/remember-command +140 -0
  116. data/bin/remember-command.rb +140 -0
  117. data/bin/richelp +99 -0
  118. data/bin/ricorda-comando +140 -0
  119. data/bin/rosa +2 -0
  120. data/bin/rosso +2 -0
  121. data/bin/run-parts.sh +50 -0
  122. data/bin/sakura-check-version +48 -0
  123. data/bin/sakura-init.DRAFT +5 -0
  124. data/bin/sakura-version +2 -0
  125. data/bin/sano +5 -0
  126. data/bin/sbianca +3 -0
  127. data/bin/sblua +2 -0
  128. data/bin/setterm-reset +5 -0
  129. data/bin/sgialla +2 -0
  130. data/bin/sgrigia +2 -0
  131. data/bin/split +37 -0
  132. data/bin/split.rb +37 -0
  133. data/bin/srosa +1 -0
  134. data/bin/srossa +2 -0
  135. data/bin/strip-white-spaces +2 -0
  136. data/bin/stty-sane +5 -0
  137. data/bin/sudo^-1 +18 -0
  138. data/bin/sverda +6 -0
  139. data/bin/swift-saio-install.sh +336 -0
  140. data/bin/synergyc +0 -0
  141. data/bin/synergys +0 -0
  142. data/bin/syracuse.pl +29 -0
  143. data/bin/tail-n+2 +5 -0
  144. data/bin/tellme +31 -0
  145. data/bin/tellme-time +4 -0
  146. data/bin/timeout3 +91 -0
  147. data/bin/top5 +4 -0
  148. data/bin/trim +4 -0
  149. data/bin/trova-broken-symlink +26 -0
  150. data/bin/twice +5 -0
  151. data/bin/twice.rb +5 -0
  152. data/bin/ubuntu-install-hamachi64 +17 -0
  153. data/bin/ultimo +5 -0
  154. data/bin/upload.py +2380 -0
  155. data/bin/usleep +0 -0
  156. data/bin/varia +90 -0
  157. data/bin/verde +2 -0
  158. data/bin/vermelho +2 -0
  159. data/bin/vim-whereveritis +5 -0
  160. data/bin/viola +1 -0
  161. data/bin/virsh-list-all-vms.py +21 -0
  162. data/bin/virtualbox-manage +41 -0
  163. data/bin/weekend +12 -0
  164. data/bin/whattimeisit +4 -0
  165. data/bin/whereis-ip +5 -0
  166. data/bin/white +3 -0
  167. data/bin/whitefy +3 -0
  168. data/bin/yellow +2 -0
  169. data/bin/yellowfy +2 -0
  170. data/bin/zombies +25 -0
  171. data/docz/polygen/dell.grm +100 -0
  172. data/docz/polygen/frati.grm +85 -0
  173. data/docz/polygen/heanet.grm +54 -0
  174. data/docz/richelp/gcompute.yml +52 -0
  175. data/docz/richelp/gcutil.yml +52 -0
  176. data/docz/richelp/gmail.yml +2 -0
  177. data/docz/richelp/ruby.yml +81 -0
  178. data/docz/richelp/sakura.yml +20 -0
  179. data/docz/richelp/sql.yml +12 -0
  180. data/docz/richelp/ubuntu.yml +22 -0
  181. data/docz/richelp/yaml.yml +39 -0
  182. data/docz/richelp/yml.yml +39 -0
  183. data/etc/sakura/devel.yml +36 -0
  184. data/etc/synergy.conf.example +37 -0
  185. data/images/color-sample.png +0 -0
  186. data/images/google.jpg +0 -0
  187. data/images/icons/toilet.png +0 -0
  188. data/images/sakura.jpg +0 -0
  189. data/images/sakura2.jpg +0 -0
  190. data/init.rb +5 -0
  191. data/lib/classes/arrays.rb +246 -0
  192. data/lib/classes/debug_ric.rb +196 -0
  193. data/lib/classes/fake_data.rb +8 -0
  194. data/lib/classes/ric_debug.rb +0 -0
  195. data/lib/classes/ricconf.rb +110 -0
  196. data/lib/classes/richelp.rb +70 -0
  197. data/lib/classes/strings.rb +284 -0
  198. data/lib/facter/google_compute_engine.rb +10 -0
  199. data/lib/recipes/20120411-puppet-rump-palladius.recipe +2 -0
  200. data/lib/recipes/20120726-skype.ubuntu.recipe +16 -0
  201. data/lib/recipes/20130206-puppet3.ubuntu.recipe +32 -0
  202. data/lib/recipes/20130206-redis.linux.recipe +17 -0
  203. data/lib/recipes/20130208-vanilla.linux.recipe +37 -0
  204. data/lib/recipes/Makefile +4 -0
  205. data/lib/recipes/README.md +29 -0
  206. data/lib/recipes/scripts/redis.sh +14 -0
  207. data/lib/ric.rb +156 -0
  208. data/lib/ric_colors.rb +313 -0
  209. data/lib/ric_strings.rb +285 -0
  210. data/lib/sonice-players/itunes_mac.rb +43 -0
  211. data/lib/sonice-players/itunes_win.rb +47 -0
  212. data/lib/sonice-players/mpd.rb +45 -0
  213. data/lib/sonice-players/rhythmbox.rb +38 -0
  214. data/profile +1 -0
  215. data/sakuric.gemspec +40 -0
  216. data/sbin/install-sakura-on-debian +25 -0
  217. data/sbin/make-install.sh +10 -0
  218. data/sbin/mate-createsymlink +4 -0
  219. data/sounds/0.ogg +0 -0
  220. data/sounds/0.wav +0 -0
  221. data/sounds/01.ogg +0 -0
  222. data/sounds/02.ogg +0 -0
  223. data/sounds/03.ogg +0 -0
  224. data/sounds/08.ogg +0 -0
  225. data/sounds/09.ogg +0 -0
  226. data/sounds/1.ogg +0 -0
  227. data/sounds/1.wav +0 -0
  228. data/sounds/10.ogg +0 -0
  229. data/sounds/100.ogg +0 -0
  230. data/sounds/11.ogg +0 -0
  231. data/sounds/12.ogg +0 -0
  232. data/sounds/13.ogg +0 -0
  233. data/sounds/14.ogg +0 -0
  234. data/sounds/15.ogg +0 -0
  235. data/sounds/16.ogg +0 -0
  236. data/sounds/17.ogg +0 -0
  237. data/sounds/18.ogg +0 -0
  238. data/sounds/19.ogg +0 -0
  239. data/sounds/2.ogg +0 -0
  240. data/sounds/2.wav +0 -0
  241. data/sounds/20.ogg +0 -0
  242. data/sounds/21.ogg +0 -0
  243. data/sounds/22.ogg +0 -0
  244. data/sounds/23.ogg +0 -0
  245. data/sounds/24.ogg +0 -0
  246. data/sounds/26.ogg +0 -0
  247. data/sounds/3.ogg +0 -0
  248. data/sounds/3.wav +0 -0
  249. data/sounds/30.ogg +0 -0
  250. data/sounds/34.ogg +0 -0
  251. data/sounds/4.ogg +0 -0
  252. data/sounds/4.wav +0 -0
  253. data/sounds/40.ogg +0 -0
  254. data/sounds/42.ogg +0 -0
  255. data/sounds/45.ogg +0 -0
  256. data/sounds/47.ogg +0 -0
  257. data/sounds/5.ogg +0 -0
  258. data/sounds/5.wav +0 -0
  259. data/sounds/50.ogg +0 -0
  260. data/sounds/6.ogg +0 -0
  261. data/sounds/6.wav +0 -0
  262. data/sounds/60.ogg +0 -0
  263. data/sounds/7.ogg +0 -0
  264. data/sounds/7.wav +0 -0
  265. data/sounds/70.ogg +0 -0
  266. data/sounds/8.ogg +0 -0
  267. data/sounds/8.wav +0 -0
  268. data/sounds/80.ogg +0 -0
  269. data/sounds/9.ogg +0 -0
  270. data/sounds/9.wav +0 -0
  271. data/sounds/90.ogg +0 -0
  272. data/sounds/a.ogg +0 -0
  273. data/sounds/aaahhh.ogg +0 -0
  274. data/sounds/abologna.ogg +0 -0
  275. data/sounds/adargenta.ogg +0 -0
  276. data/sounds/alzatiecammina.ogg +0 -0
  277. data/sounds/apache.ogg +0 -0
  278. data/sounds/attenzione.ogg +0 -0
  279. data/sounds/awesome.m4a +0 -0
  280. data/sounds/bazinga.mp3 +0 -0
  281. data/sounds/bazinga.ogg +0 -0
  282. data/sounds/bela regaz.wav +0 -0
  283. data/sounds/benvenuti.wav +0 -0
  284. data/sounds/benvenuti2.wav +0 -0
  285. data/sounds/bergonz.ogg +0 -0
  286. data/sounds/boh.ogg +0 -0
  287. data/sounds/buahah.ogg +0 -0
  288. data/sounds/buonasera.ogg +0 -0
  289. data/sounds/buongiorno.ogg +0 -0
  290. data/sounds/burp.ogg +0 -0
  291. data/sounds/carlo.ogg +0 -0
  292. data/sounds/cena.ogg +0 -0
  293. data/sounds/che figata.m4a +0 -0
  294. data/sounds/che figlio di puttana.m4a +0 -0
  295. data/sounds/che.ogg +0 -0
  296. data/sounds/ciao.ogg +0 -0
  297. data/sounds/ciao.wav +0 -0
  298. data/sounds/da.ogg +0 -0
  299. data/sounds/davide.ogg +0 -0
  300. data/sounds/demone.ogg +0 -0
  301. data/sounds/dhcp.ogg +0 -0
  302. data/sounds/dinuovo.ogg +0 -0
  303. data/sounds/dns.ogg +0 -0
  304. data/sounds/dopo.ogg +0 -0
  305. data/sounds/e'.ogg +0 -0
  306. data/sounds/eattivo.ogg +0 -0
  307. data/sounds/ee.ogg +0 -0
  308. data/sounds/ehi.ogg +0 -0
  309. data/sounds/eoragiu.ogg +0 -0
  310. data/sounds/eorasu.ogg +0 -0
  311. data/sounds/eripartita.ogg +0 -0
  312. data/sounds/estato.ogg +0 -0
  313. data/sounds/estatoriavviato.ogg +0 -0
  314. data/sounds/fratro.ogg +0 -0
  315. data/sounds/frozenbubble.ogg +0 -0
  316. data/sounds/funziona.ogg +0 -0
  317. data/sounds/go raibh mile maith agaibh.m4a +0 -0
  318. data/sounds/grazie.ogg +0 -0
  319. data/sounds/h1.ogg +0 -0
  320. data/sounds/hainuovaposta.ogg +0 -0
  321. data/sounds/hogiamangiato.ogg +0 -0
  322. data/sounds/host.ogg +0 -0
  323. data/sounds/il.ogg +0 -0
  324. data/sounds/ilcomputer.ogg +0 -0
  325. data/sounds/ilnumerodaleiselezionatoe.ogg +0 -0
  326. data/sounds/ilprocesso.ogg +0 -0
  327. data/sounds/ilprogramma.ogg +0 -0
  328. data/sounds/ilservizio.ogg +0 -0
  329. data/sounds/imap.ogg +0 -0
  330. data/sounds/imieisuperpoterimidiconoche.ogg +0 -0
  331. data/sounds/infunzione.ogg +0 -0
  332. data/sounds/inpunto.ogg +0 -0
  333. data/sounds/ipmon.ogg +0 -0
  334. data/sounds/laconnessioneadinternet.ogg +0 -0
  335. data/sounds/lastampante.ogg +0 -0
  336. data/sounds/lazzaron.ogg +0 -0
  337. data/sounds/ldap.ogg +0 -0
  338. data/sounds/linterfaccia.ogg +0 -0
  339. data/sounds/lucilla.ogg +0 -0
  340. data/sounds/ma vaffanculo.m4a +0 -0
  341. data/sounds/majjal.wav +0 -0
  342. data/sounds/mamma.ogg +0 -0
  343. data/sounds/mauro.ogg +0 -0
  344. data/sounds/max.ogg +0 -0
  345. data/sounds/meerda.wav +0 -0
  346. data/sounds/meno.ogg +0 -0
  347. data/sounds/merda clo.wav +0 -0
  348. data/sounds/mezza.ogg +0 -0
  349. data/sounds/mila.ogg +0 -0
  350. data/sounds/mille.ogg +0 -0
  351. data/sounds/minuti.ogg +0 -0
  352. data/sounds/named.ogg +0 -0
  353. data/sounds/no.ogg +0 -0
  354. data/sounds/nohofame.ogg +0 -0
  355. data/sounds/nonfunziona.ogg +0 -0
  356. data/sounds/nonriescoatrovare.ogg +0 -0
  357. data/sounds/nonsarebbeoradilavorare.ogg +0 -0
  358. data/sounds/nonstalavorando.ogg +0 -0
  359. data/sounds/numero.wav +0 -0
  360. data/sounds/ooohhh.ogg +0 -0
  361. data/sounds/pinger.ogg +0 -0
  362. data/sounds/pocofa.ogg +0 -0
  363. data/sounds/pop3.ogg +0 -0
  364. data/sounds/porca puttana.m4a +0 -0
  365. data/sounds/porcapupazza.ogg +0 -0
  366. data/sounds/ppp.ogg +0 -0
  367. data/sounds/pranzo.ogg +0 -0
  368. data/sounds/prego.ogg +0 -0
  369. data/sounds/prima.ogg +0 -0
  370. data/sounds/qualcosamidice.ogg +0 -0
  371. data/sounds/raggiungibile.ogg +0 -0
  372. data/sounds/riccardo.ogg +0 -0
  373. data/sounds/salsa ridge.wav +0 -0
  374. data/sounds/scusa.ogg +0 -0
  375. data/sounds/seriously man.m4a +0 -0
  376. data/sounds/si.ogg +0 -0
  377. data/sounds/sito porno con sonoro.wav +0 -0
  378. data/sounds/socmel.wav +0 -0
  379. data/sounds/sono.ogg +0 -0
  380. data/sounds/sonoacasa.ogg +0 -0
  381. data/sounds/sonole.ogg +0 -0
  382. data/sounds/sputo.ogg +0 -0
  383. data/sounds/ssh.ogg +0 -0
  384. data/sounds/stagiocando.ogg +0 -0
  385. data/sounds/statospento.ogg +0 -0
  386. data/sounds/stopaiodipalle.ogg +0 -0
  387. data/sounds/thesedicks.wav +0 -0
  388. data/sounds/tornatosu.ogg +0 -0
  389. data/sounds/trapoco.ogg +0 -0
  390. data/sounds/trequarti.ogg +0 -0
  391. data/sounds/tutti.ogg +0 -0
  392. data/sounds/una.ogg +0 -0
  393. data/sounds/unquarto.ogg +0 -0
  394. data/sounds/virgola.ogg +0 -0
  395. data/sources/c/usleep.c +50 -0
  396. data/spec/my_first_spec.rb +6 -0
  397. data/tasks/sakuric-gem.rake +21 -0
  398. data/tasks/testing.rake +15 -0
  399. data/templates/bashrc.inject +10 -0
  400. data/templates/happy_christmas.ascii_art +5 -0
  401. data/test/roodi.sh +10 -0
  402. data/test/test_mini_failing.rb +3 -0
  403. data/test/test_mini_ok.rb +3 -0
  404. data/test/test_ruby_syntax.sh +12 -0
  405. data/third-party/jsawk/README.markdown +437 -0
  406. data/third-party/jsawk/jsawk +1128 -0
  407. metadata +835 -0
@@ -0,0 +1,285 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class String
4
+ RICVERSION = '1.1'
5
+
6
+ def basename
7
+ split('/').last
8
+ end
9
+
10
+ def left(length,padding)
11
+ mylen = self.length
12
+ padding_char = padding[0] # troppo difficile fare che paddi "abc" su 8 fa "abcabcab" checcavolo :)
13
+ mylen < length ?
14
+ self + padding * (length - mylen) :
15
+ self
16
+ end
17
+
18
+ def color(mycolor = :orange )
19
+ send(mycolor,self)
20
+ end
21
+
22
+ def uncolor()
23
+ scolora(self)
24
+ end
25
+
26
+ # trovata qui: la mia funziona cmq
27
+ # http://www.ruby-forum.com/topic/96222
28
+ def to_class
29
+ Object.const_get(self)
30
+ end
31
+
32
+ def nlines
33
+ split("\n").size
34
+ end
35
+
36
+ # rimuove spazi a inizio e fine
37
+ def trim
38
+ self.gsub(/^\s+/,'').gsub(/\s+$/,'')
39
+ end
40
+
41
+ def escape_printf
42
+ gsub("%",'%%')
43
+ end
44
+
45
+ def escape_double_quotes
46
+ gsub('"','\"')
47
+ end
48
+ def escape_single_quotes
49
+ gsub("'","\'")
50
+ end
51
+
52
+ # dumps string to file (in APPEND) :)
53
+ def tee(opts={})
54
+ filename = opts.fetch :file, __FILE__ + ".tmpric"
55
+ verbose = opts.fetch :verbose, true
56
+ preamble = lambda {|where| return "# Teeing string (pid=#{$$}, size=#{self.size}B, opts=#{opts}) into file: #{blue filename}\n" }
57
+ deb "Teeing string (#{self.size}B, opts=#{opts}) into file: #{blue filename}"
58
+ File.open(filename, 'a') {|f|
59
+ f.write("# {{{ String.tee #{} from #{__FILE__}\n") if verbose
60
+ f.write(preamble.call(:BEGIN)) if verbose
61
+ f.write(self)
62
+ f.write("\n" + preamble.call(:END))if verbose
63
+ f.write("\n# }}} Tee stop pid=##{$$}\n")if verbose
64
+ } # i think it closes it here...
65
+ puts "Written #{self.size}B in append to: '#{yellow filename}'" if verbose
66
+ return self
67
+ end
68
+
69
+ =begin
70
+ return string with regex highlighted
71
+
72
+ TODO highlight just the matching regex
73
+ =end
74
+ def grep_color(regex, opts={} )
75
+ deb "string grep_color(regex: '#{regex}')"
76
+ color = opts[:color] || true # false
77
+ verbose = opts[:verbose] || true # TODO false
78
+ return red(self) if self.match(regex)
79
+ return verbose ?
80
+ self :
81
+ ''
82
+ end
83
+
84
+ # Doesnt work. Look at ~/bin/uptimes for a VERY nice implementation
85
+ # def color_grep(regex, mycolor, opts={} )
86
+ # #deb "string grep_color(regex: '#{regex}' w/ color='#{mycolor}')"
87
+ # color = opts[:color] || true # false
88
+ # return self.gsub(regex, $1.color(mycolor)) if self.match(regex)
89
+ # return self
90
+ # end
91
+
92
+ alias :right :left
93
+
94
+ def flag(nation)
95
+ flag(self, flag = '')
96
+ end
97
+
98
+ # enclose string in single quotes..
99
+ def quote(sep = nil)
100
+ sep ||= "'"
101
+ sep + self + sep
102
+ end
103
+ def double_quote(); quote('"') ; end
104
+
105
+ def depurate_for_file
106
+ gsub(/[\/: \.]/ , '_')
107
+ end
108
+
109
+ def prepend(str)
110
+ str.to_s+self
111
+ end
112
+ def append(str)
113
+ self+str.to_s
114
+ end
115
+
116
+ # a: b
117
+ # c: d
118
+ # -->
119
+ def to_hash(description='String::to_hash() made by genious RCarlesso (give a better description if u dont like this!)')
120
+ arr = Hash.new
121
+ arr['_meta'] = Hash.new
122
+ arr['_meta']['description'] = description
123
+ arr['_meta']['time'] = Time.now
124
+ self.split("\n").each{|line|
125
+ k,v = line.split(': ')
126
+ arr[k.strip] = v.strip
127
+ } rescue arr['_meta']['errors'] = $!
128
+ arr
129
+ end
130
+
131
+ # serio
132
+ #def start_with?(prefix)
133
+ # prefix = prefix.to_s
134
+ # self[0, prefix.length] == prefix
135
+ #end
136
+ alias :starts_with? :start_with?
137
+ alias :begins_with? :start_with?
138
+ alias :begin_with? :start_with?
139
+
140
+ # 'abcde' => '*****'
141
+ def asterisks(ch='*')
142
+ ch * (self.size)
143
+ end
144
+
145
+ def shorten (count = 50)
146
+ if self.length >= count
147
+ shortened = self[0, count]
148
+ splitted = shortened.split(/\s/)
149
+ words = splitted.length
150
+ splitted[0, words-1].join(" ") + ' ...'
151
+ else
152
+ self
153
+ end
154
+ end
155
+ # alias :excerpt :shorten
156
+ # no dai, in realta excerpt sarebbe con SEARCH di parola e ci orla intorno...
157
+
158
+ # sanitizza un filename
159
+ def sanitize_path
160
+ gsub(/[\/: ]/,'_')
161
+ end
162
+
163
+ # see arrays!
164
+ # def method_missing
165
+ # end
166
+
167
+ def to_html
168
+ %(<span class="ricsvn_string" >#{self}</span>)
169
+ end
170
+
171
+ def initial; self[0..0] ; end
172
+
173
+
174
+ # canonicalize: delete leading and trailing spaces, replaces newlines
175
+ # with one space and then replace all continuouse spaces with one ' '
176
+ # (including tabs and other fancy things)
177
+
178
+ # non funziona bene perche non so come CACCHIO mappare il /g.
179
+ # oare che in ruby ci sia solo /i x(xtended) n(multiline)
180
+ def canonicalize
181
+ value = self
182
+ value = value.gsub( /^\s+/, '') # s/^\s+//;
183
+ value = value.gsub( /\s+$/, '') # value =~ s/\s+$//;
184
+ value = value.gsub( /\r*\n/n, ' ') # value =~ s/\r*\n/ /g;
185
+ value = value.gsub( /\s+$/n , ' ') # value =~ s/\s+$/ /g;
186
+ deb "Original: '''#{self}'''"
187
+ deb "Canonical: '''#{value}'''"
188
+ return value
189
+ end
190
+
191
+ # a manhouse :-(
192
+ if String.method_defined?(:singolarizza)
193
+ $stderr.puts '#DEB 1 Attenzione! Singolarizza already defined within string. Bypassing. PS Fallo per tutta la classe String usando un prestanome tipo $ric_sticazzi = 42 e checka su di lui'
194
+ else
195
+ #$stderr.puts "#DEB 2 Singolarizza: prima definizione (string='#{self.inspect}')..."
196
+ def singolarizza
197
+ return self.singularize if self.respond_to?(:singularize)
198
+ deb("singularize '#{self}'")
199
+ m = self.match( /(.*)es$/) # i.e. matches
200
+ return m[1] if (m)
201
+ m = self.match( /(.*)s$/)
202
+ return m[1] if m
203
+ return m
204
+ end
205
+ end
206
+
207
+ =begin
208
+ greppa dalla prima occorrenza di FROM in poi
209
+ =end
210
+
211
+ def from_first_line_matching(regex_from)
212
+ arr_lines = self.split("\n")
213
+ ix1 = arr_lines.index_regex(regex_from) || 0
214
+ if ! ix1
215
+ throw "Cattivo Indice per arr_lines. Non greppa una fava con: #{regex_from}"
216
+ ix1 = 0
217
+ end
218
+ ix2 = arr_lines.length
219
+ deb "#{ix1}..#{ix2}"
220
+ joint = arr_lines[ix1..ix2].join("\n") #rescue ''
221
+ return joint
222
+ end
223
+
224
+ def to_first_line_matching(regex_from)
225
+ arr_lines = self.split("\n")
226
+ ix2 = arr_lines.index_regex(regex_from)
227
+ #ix2 = arr_lines.length
228
+ return arr_lines[0..ix2].join("\n")
229
+ end
230
+
231
+ end #/Class String
232
+
233
+
234
+ ################################################################################
235
+ ### Miscellaneous string functions
236
+ ################################################################################
237
+
238
+ def clear_screen
239
+ print "\e[2J\e[f"
240
+ end
241
+ alias :clear :clear_screen
242
+
243
+ def title(s)
244
+ title_n(s)
245
+ end
246
+ def title_n(s,n=2)
247
+ "== #{s} =="
248
+ end
249
+
250
+ LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin at purus id ante pulvinar dapibus. Donec risus justo, gravida ac vulputate a, lacinia eget leo. Duis quam tellus, tempus at feugiat a, eleifend et velit. Donec et enim id libero malesuada luctus nec at nibh. Sed elit est, interdum sit amet sollicitudin ac, vulputate eget metus. In hac habitasse platea dictumst. Cras vitae justo at turpis elementum sollicitudin. Etiam quis quam placerat erat tincidunt fermentum. Ut vel mauris magna. Vestibulum luctus leo eget lectus gravida ac dignissim enim vestibulum. Integer facilisis mi sed justo aliquet a lacinia lacus scelerisque.
251
+ Aliquam sed purus vel felis euismod pharetra eu a ipsum. Suspendisse potenti. Mauris aliquet, lorem id mattis ornare, dolor mauris tincidunt tellus, ac feugiat urna sem eget diam. Nulla venenatis urna et elit lobortis eleifend. Ut feugiat adipiscing nisi vitae accumsan. Aliquam ullamcorper odio a nibh scelerisque non tincidunt urna ullamcorper. Sed vitae eleifend quam. Nunc vulputate vulputate viverra. Duis eu enim eros. Nunc lacinia nibh neque, sit amet varius arcu.
252
+ Maecenas facilisis porttitor vestibulum. Phasellus nisl elit, porttitor id pulvinar nec, malesuada quis lectus. Suspendisse lacinia odio vitae eros molestie suscipit. Vivamus eu nulla ac augue adipiscing luctus. Curabitur rhoncus placerat dui a consectetur. Integer suscipit felis vitae eros mattis cursus. Integer sollicitudin ante in risus feugiat tincidunt sed sit amet libero. Nunc molestie lorem ut nulla aliquam viverra. Etiam bibendum mollis mattis. Phasellus ipsum tortor, egestas consequat sollicitudin non, hendrerit eu tortor. Nam at magna ipsum, non convallis ligula. Etiam ac eros a nunc elementum bibendum vitae vitae lacus. Vivamus placerat quam sit amet urna mattis in luctus nulla venenatis. Praesent tempus egestas interdum. Nulla facilisi. Nulla id ligula et nunc egestas dictum sed sodales tellus. Integer vestibulum commodo mauris, blandit porta lectus tincidunt quis. Vestibulum varius est eu turpis ultrices pellentesque.
253
+ Donec aliquam elit quis augue tristique id lacinia augue laoreet. Duis placerat tellus eget urna vehicula volutpat. Vestibulum tortor dui, ultricies quis luctus sed, ultricies sit amet dui. Sed nec magna ac mauris imperdiet venenatis in id velit. Vestibulum non nibh nisi, eu elementum metus. Integer porttitor scelerisque pharetra. Maecenas eu tincidunt augue. Donec viverra diam lacinia ligula rhoncus viverra. Cras dictum rhoncus nisi sit amet malesuada. Quisque consectetur sollicitudin magna, nec faucibus nulla lacinia ac. Donec accumsan gravida odio, nec vehicula enim hendrerit sed. Etiam in mauris et mi sollicitudin congue non sit amet augue. Praesent nisi tortor, posuere vehicula rutrum interdum, tincidunt non tortor. Aliquam adipiscing mollis odio, eget accumsan lectus blandit sed. Sed tristique, ipsum eu laoreet dignissim, nunc nisi rhoncus tellus, sed molestie turpis ante vitae orci. Nullam tincidunt suscipit ligula sit amet sodales. Curabitur auctor tempus rutrum.
254
+ Donec non venenatis lectus. Ut imperdiet felis quis augue viverra pellentesque. Duis sodales, magna at tincidunt volutpat, turpis tellus auctor lacus, et mollis ante odio in tellus. Aliquam euismod tempor aliquam. Vivamus at eros eget felis consequat faucibus dignissim consequat diam. Cras et dolor sagittis mi pharetra tincidunt vitae a tortor. Vestibulum at dictum augue. Sed commodo magna quis lectus bibendum accumsan. Aliquam consectetur feugiat augue, eget suscipit mi mattis ac. Donec at tristique lorem. Nulla non nisl sed felis volutpat ullamcorper." unless defined?(LOREM_IPSUM)
255
+
256
+ def lorem_ipsum(len=0)
257
+ len == 0 ?
258
+ LOREM_IPSUM :
259
+ LOREM_IPSUM[0..len]
260
+ end
261
+ alias :lorem :lorem_ipsum
262
+
263
+ # supports: strings, arrays and regexes :)
264
+ # @returns a Regexp
265
+ def autoregex(anything)
266
+ deb "Autoregex() supercool! With a #{blue anything.class}"
267
+ case anything.class.to_s
268
+ when 'String'
269
+ if anything.match(/^\/.*\/$/) # '/asd/' is probably an error! The regex builder trails with '/' automatically
270
+ fatal 23,"Attention, the regex is a string with trailing '/', are you really SURE this is what you want?!?"
271
+ end
272
+ return Regexp.new(anything)
273
+ when 'Regexp'
274
+ return anything # already ok
275
+ when 'Array'
276
+ return Regexp.new(anything.join('|'))
277
+ else
278
+ #msg = "#{__FILE__}.#{__LINE__}: autoregex() Exception: Unknown class for autoregexing: #{red anything.class}"
279
+ msg = "Unknown class for autoregexing: #{red anything.class}"
280
+ $stderr.puts( msg )
281
+ raise( msg )
282
+ end
283
+ return nil
284
+ end
285
+
@@ -0,0 +1,43 @@
1
+ class ItunesPlayer_MacOSX < MusicPlayer
2
+ def playpause
3
+ tell_to 'playpause'
4
+ end
5
+
6
+ def prev
7
+ tell_to 'previous track'
8
+ end
9
+
10
+ def next
11
+ tell_to 'next track'
12
+ end
13
+
14
+ def voldown
15
+ tell_to 'set sound volume to sound volume - 10'
16
+ end
17
+
18
+ def volup
19
+ tell_to 'set sound volume to sound volume + 10'
20
+ end
21
+
22
+ def volume
23
+ tell_to 'return sound volume'
24
+ end
25
+
26
+ def current_track
27
+ tell_to 'return (artist of current track) & " - " & (name of current track)'
28
+ end
29
+
30
+ def launched?
31
+ %x(osascript -e 'tell app "Itunes" to return name of current track' 2>/dev/null)
32
+ $? == 0
33
+ end
34
+
35
+ def name
36
+ "iTunes"
37
+ end
38
+
39
+ private
40
+ def tell_to(command)
41
+ %x(osascript -e 'tell app "iTunes" to #{command}').rstrip
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ class ItunesPlayer_Win < MusicPlayer
2
+ def playpause
3
+ @itunes.PlayPause()
4
+ end
5
+
6
+ def prev
7
+ @itunes.PreviousTrack()
8
+ end
9
+
10
+ def next
11
+ @itunes.NextTrack()
12
+ end
13
+
14
+ def voldown
15
+ @itunes.SoundVolume=@itunes.SoundVolume - 10
16
+ end
17
+
18
+ def volup
19
+ @itunes.SoundVolume=@itunes.SoundVolume + 10
20
+ end
21
+
22
+ def volume
23
+ @itunes.SoundVolume
24
+ end
25
+
26
+ def current_track
27
+ curTrack=@itunes.CurrentTrack
28
+ if(curTrack)
29
+ return (curTrack.Artist + " - " + curTrack.name)
30
+ end
31
+ ""
32
+ end
33
+
34
+ def launched?
35
+ begin
36
+ require 'win32ole'
37
+ @itunes = WIN32OLE.new("iTunes.Application")
38
+ return true
39
+ rescue LoadError
40
+ return false
41
+ end
42
+ end
43
+
44
+ def name
45
+ "iTunes"
46
+ end
47
+ end
@@ -0,0 +1,45 @@
1
+ class MpdPlayer < MusicPlayer
2
+ def playpause
3
+ mpc 'toggle'
4
+ end
5
+
6
+ def prev
7
+ mpc 'prev'
8
+ end
9
+
10
+ def next
11
+ mpc 'next'
12
+ end
13
+
14
+ def voldown
15
+ mpc 'volume -10'
16
+ end
17
+
18
+ def volup
19
+ mpc 'volume +10'
20
+ end
21
+
22
+ def volume
23
+ mpc('volume').grep(/([0-9]+)/)
24
+ $1
25
+ end
26
+
27
+ def current_track
28
+ mpc('')
29
+ end
30
+
31
+ def launched?
32
+ %x(mpc 2> /dev/null)
33
+ $? == 0
34
+ end
35
+
36
+ def host
37
+ ENV['MPD_HOST'] || super
38
+ end
39
+
40
+ private
41
+ def mpc(command)
42
+ %x(mpc #{command}).split("\n").first
43
+ end
44
+ end
45
+
@@ -0,0 +1,38 @@
1
+ class RhythmboxPlayer < MusicPlayer
2
+ def playpause
3
+ tell_to 'play-pause'
4
+ end
5
+
6
+ def prev
7
+ tell_to 'previous'
8
+ end
9
+
10
+ def next
11
+ tell_to 'next'
12
+ end
13
+
14
+ def voldown
15
+ tell_to 'volume-down'
16
+ end
17
+
18
+ def volup
19
+ tell_to 'volume-up'
20
+ end
21
+
22
+ def volume
23
+ tell_to 'print-volume'
24
+ end
25
+
26
+ def current_track
27
+ tell_to 'print-playing'
28
+ end
29
+
30
+ def launched?
31
+ %x(rhythmbox-client --no-start --print-playing 2>/dev/null).rstrip != ""
32
+ end
33
+
34
+ private
35
+ def tell_to(command)
36
+ %x(rhythmbox-client --no-start --#{command}).rstrip
37
+ end
38
+ end