Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Initial commit

  • Loading branch information...
commit 46986d5cb86012414326bdb5a4480e6714e19b9b 0 parents
@camthompson authored
Showing with 14,327 additions and 0 deletions.
  1. +15 −0 .gitignore
  2. +195 −0 .gitmodules
  3. +9 −0 README.md
  4. +14 −0 ackrc
  5. +24 −0 aprc
  6. +2 −0  bash_profile
  7. +1 −0  bashrc
  8. +79 −0 css/pinboard.in.css
  9. +26 −0 ctags
  10. +4 −0 curlrc
  11. +29 −0 cvsignore
  12. +3 −0  editrc
  13. +2 −0  gemrc
  14. +89 −0 gitconfig
  15. +43 −0 githelpers
  16. +9 −0 gittemplate/config
  17. +7 −0 gittemplate/hooks/ctags
  18. +2 −0  gittemplate/hooks/post-checkout
  19. +2 −0  gittemplate/hooks/post-commit
  20. +2 −0  gittemplate/hooks/post-merge
  21. +4 −0 gittemplate/hooks/post-rewrite
  22. +3 −0  gittemplate/info/attributes
  23. +37 −0 global.gems
  24. +53 −0 gvimrc
  25. +5 −0 hgrc
  26. +12 −0 inputrc
  27. +88 −0 irbrc
  28. +319 −0 irssi/cam.theme
  29. +295 −0 irssi/config
  30. +294 −0 irssi/default.theme
  31. +1 −0  irssi/sasl.auth.example
  32. +2,478 −0 irssi/scripts/adv_windowlist.pl
  33. +1 −0  irssi/scripts/autorun/adv_windowlist.pl
  34. +1 −0  irssi/scripts/autorun/cap_sasl.pl
  35. +1 −0  irssi/scripts/autorun/hilightwin.pl
  36. +1 −0  irssi/scripts/autorun/nm.pl
  37. +1 −0  irssi/scripts/autorun/queryresume.pl
  38. +1 −0  irssi/scripts/autorun/screen_away.pl
  39. +1 −0  irssi/scripts/autorun/trackbar.pl
  40. +1 −0  irssi/scripts/autorun/uberprompt.pl
  41. +1 −0  irssi/scripts/autorun/vim_mode.pl
  42. +273 −0 irssi/scripts/cap_sasl.pl
  43. +364 −0 irssi/scripts/growl.pl
  44. +57 −0 irssi/scripts/hilightwin.pl
  45. +662 −0 irssi/scripts/nm.pl
  46. +65 −0 irssi/scripts/queryresume.pl
  47. +243 −0 irssi/scripts/screen_away.pl
  48. +342 −0 irssi/scripts/trackbar.pl
  49. +774 −0 irssi/scripts/uberprompt.pl
  50. +3,783 −0 irssi/scripts/vim_mode.pl
  51. +22 −0 irssi/vim_moderc
  52. +8 −0 js/500px.com.js
  53. +11 −0 msmtprc
  54. 0  mutt/alias
  55. 0  mutt/cache/bodies/.gitkeep
  56. 0  mutt/cache/headers/.gitkeep
  57. +90 −0 mutt/cam.muttrc
  58. +18 −0 mutt/mailcap
  59. 0  mutt/tmp/.gitkeep
  60. +127 −0 mutt/view_attachment.sh
  61. +163 −0 muttrc
  62. +86 −0 notmuch-config
  63. +16 −0 offlineimap.py
  64. +56 −0 offlineimaprc
  65. +185 −0 pentadactyl/colors/solarized-dark.penta
  66. +183 −0 pentadactyl/colors/solarized-light.penta
  67. +583 −0 pentadactyl/plugins/buftabs.js
  68. +52 −0 pentadactylrc
  69. +172 −0 pryrc
  70. +9 −0 railsrc
  71. +1 −0  rspec
  72. +1 −0  screenrc
  73. +24 −0 setup
  74. +102 −0 tmux.conf
  75. +29 −0 update
  76. +1 −0  urlview
  77. +3 −0  vim/after/plugin/vimrc_after.vim
  78. +33 −0 vim/plugin/autocmd.vim
  79. +10 −0 vim/plugin/browser.vim
  80. +9 −0 vim/plugin/clearregisters.vim
  81. +2 −0  vim/plugin/difforig.vim
  82. +9 −0 vim/plugin/insertnewline.vim
  83. +70 −0 vim/plugin/maps.vim
  84. +10 −0 vim/plugin/openchangedfiles.vim
  85. +28 −0 vim/plugin/opentestalternate.vim
  86. +8 −0 vim/plugin/promotetolet.vim
  87. +2 −0  vim/plugin/settings/clam.vim
  88. +24 −0 vim/plugin/settings/ctrlp.vim
  89. +3 −0  vim/plugin/settings/easymotion.vim
  90. +6 −0 vim/plugin/settings/gist.vim
  91. +2 −0  vim/plugin/settings/gundo.vim
  92. +1 −0  vim/plugin/settings/kwbdi.vim
  93. +3 −0  vim/plugin/settings/nerdtree.vim
  94. +9 −0 vim/plugin/settings/powerline.vim
  95. +3 −0  vim/plugin/settings/rails.vim
  96. +6 −0 vim/plugin/settings/ruby.vim
  97. +1 −0  vim/plugin/settings/space.vim
  98. +3 −0  vim/plugin/settings/splitjoin.vim
  99. +2 −0  vim/plugin/settings/supertab.vim
  100. +4 −0 vim/plugin/settings/surround.vim
  101. +3 −0  vim/plugin/settings/syntastic.vim
  102. +19 −0 vim/plugin/settings/tabular.vim
  103. +1 −0  vim/plugin/settings/tagbar.vim
  104. +3 −0  vim/plugin/settings/turbux.vim
  105. +7 −0 vim/plugin/settings/vimux.vim
  106. +1 −0  vim/plugin/settings/vitality.vim
  107. +3 −0  vim/plugin/settings/vroom.vim
  108. +2 −0  vim/plugin/settings/zoomwin.vim
  109. +13 −0 vim/plugin/stripwhitespace.vim
  110. +7 −0 vim/plugin/synstack.vim
  111. +10 −0 vim/plugin/wordprocessor.vim
  112. 0  vim/swp/.gitkeep
  113. 0  vim/undo/.gitkeep
  114. +135 −0 vimrc
  115. +14 −0 zlogin
  116. +1 −0  zlogout
  117. +6 −0 zsh/func/_extract
  118. +12 −0 zsh/func/_git-info
  119. +6 −0 zsh/func/_ls-archive
  120. +41 −0 zsh/func/_t
  121. +39 −0 zsh/func/add-zsh-trap
  122. +69 −0 zsh/func/extract
  123. +9 −0 zsh/func/git-dir
  124. +363 −0 zsh/func/git-info
  125. +1 −0  zsh/func/is-true
  126. +46 −0 zsh/func/ls-archive
  127. +1 −0  zsh/func/mcd
  128. +66 −0 zsh/func/prompt_cam_setup
  129. +20 −0 zsh/func/prompt_minimal_setup
  130. +11 −0 zsh/func/ruby-info
  131. +86 −0 zsh/func/t
  132. +85 −0 zsh/mod/aliases.zsh
  133. +31 −0 zsh/mod/colors.zsh
  134. +108 −0 zsh/mod/completion.zsh
  135. +9 −0 zsh/mod/dirs.zsh
  136. +112 −0 zsh/mod/editor.zsh
  137. +16 −0 zsh/mod/history.zsh
  138. +37 −0 zshenv
  139. +26 −0 zshrc
15 .gitignore
@@ -0,0 +1,15 @@
+vim/swp/*
+!vim/swp/.gitkeep
+vim/undo/*
+!vim/undo/.gitkeep
+vim/yankring_history_v2.txt
+vim/dbext_history.txt
+pentadactyl/info
+mutt/tmp/*
+!mutt/tmp/.gitkeep
+mutt/cache/headers/*
+!mutt/cache/headers/.gitkeep
+mutt/cache/bodies/*
+!mutt/cache/bodies/.gitkeep
+irssi/sasl.auth
+irssi/saved_colors
195 .gitmodules
@@ -0,0 +1,195 @@
+[submodule "vim/bundle/pathogen"]
+ path = vim/bundle/pathogen
+ url = git://github.com/tpope/vim-pathogen.git
+[submodule "vim/bundle/abolish"]
+ path = vim/bundle/abolish
+ url = git://github.com/tpope/vim-abolish.git
+[submodule "vim/bundle/cucumber"]
+ path = vim/bundle/cucumber
+ url = git://github.com/tpope/vim-cucumber.git
+[submodule "vim/bundle/haml"]
+ path = vim/bundle/haml
+ url = git://github.com/tpope/vim-haml.git
+[submodule "vim/bundle/ragtag"]
+ path = vim/bundle/ragtag
+ url = git://github.com/tpope/vim-ragtag.git
+[submodule "vim/bundle/rails"]
+ path = vim/bundle/rails
+ url = git://github.com/tpope/vim-rails.git
+[submodule "vim/bundle/repeat"]
+ path = vim/bundle/repeat
+ url = git://github.com/tpope/vim-repeat.git
+[submodule "vim/bundle/ruby"]
+ path = vim/bundle/ruby
+ url = git://github.com/vim-ruby/vim-ruby.git
+[submodule "vim/bundle/unimpaired"]
+ path = vim/bundle/unimpaired
+ url = git://github.com/tpope/vim-unimpaired.git
+[submodule "vim/bundle/surround"]
+ path = vim/bundle/surround
+ url = git://github.com/tpope/vim-surround.git
+[submodule "vim/bundle/fugitive"]
+ path = vim/bundle/fugitive
+ url = git://github.com/tpope/vim-fugitive.git
+[submodule "vim/bundle/space"]
+ path = vim/bundle/space
+ url = git://github.com/spiiph/vim-space.git
+[submodule "vim/bundle/markdown"]
+ path = vim/bundle/markdown
+ url = git://github.com/tpope/vim-markdown.git
+[submodule "vim/bundle/coffee-script"]
+ path = vim/bundle/coffee-script
+ url = git://github.com/kchmck/vim-coffee-script.git
+[submodule "vim/bundle/gist"]
+ path = vim/bundle/gist
+ url = git://github.com/mattn/gist-vim.git
+[submodule "vim/bundle/gundo"]
+ path = vim/bundle/gundo
+ url = git://github.com/sjl/gundo.vim.git
+[submodule "vim/bundle/easymotion"]
+ path = vim/bundle/easymotion
+ url = git://github.com/Lokaltog/vim-easymotion.git
+[submodule "vim/bundle/rake"]
+ path = vim/bundle/rake
+ url = git://github.com/tpope/vim-rake.git
+[submodule "vim/bundle/javascript"]
+ path = vim/bundle/javascript
+ url = git://github.com/pangloss/vim-javascript.git
+[submodule "vim/bundle/liquid"]
+ path = vim/bundle/liquid
+ url = git://github.com/tpope/vim-liquid.git
+[submodule "vim/bundle/git"]
+ path = vim/bundle/git
+ url = git://github.com/tpope/vim-git.git
+[submodule "vim/bundle/rvm"]
+ path = vim/bundle/rvm
+ url = git://github.com/tpope/vim-rvm.git
+[submodule "vim/bundle/linediff"]
+ path = vim/bundle/linediff
+ url = git://github.com/AndrewRadev/linediff.vim.git
+[submodule "vim/bundle/bundler"]
+ path = vim/bundle/bundler
+ url = git://github.com/tpope/vim-bundler.git
+[submodule "vim/bundle/auto-pairs"]
+ path = vim/bundle/auto-pairs
+ url = git://github.com/jiangmiao/auto-pairs.git
+[submodule "vim/bundle/eunuch"]
+ path = vim/bundle/eunuch
+ url = git://github.com/tpope/vim-eunuch.git
+[submodule "vim/bundle/endwise"]
+ path = vim/bundle/endwise
+ url = git://github.com/tpope/vim-endwise.git
+[submodule "vim/bundle/supertab"]
+ path = vim/bundle/supertab
+ url = git://github.com/ervandew/supertab.git
+[submodule "vim/bundle/tabular"]
+ path = vim/bundle/tabular
+ url = git://github.com/godlygeek/tabular.git
+[submodule "vim/bundle/kwbdi"]
+ path = vim/bundle/kwbdi
+ url = git://github.com/vim-scripts/kwbdi.vim.git
+[submodule "vim/bundle/ctrlp"]
+ path = vim/bundle/ctrlp
+ url = https://github.com/kien/ctrlp.vim.git
+[submodule "vim/bundle/tcomment"]
+ path = vim/bundle/tcomment
+ url = git://github.com/tomtom/tcomment_vim.git
+[submodule "vim/bundle/splitjoin"]
+ path = vim/bundle/splitjoin
+ url = git://github.com/AndrewRadev/splitjoin.vim.git
+[submodule "vim/bundle/qargs"]
+ path = vim/bundle/qargs
+ url = https://github.com/nelstrom/vim-qargs.git
+[submodule "vim/bundle/visual-star-search"]
+ path = vim/bundle/visual-star-search
+ url = https://github.com/nelstrom/vim-visual-star-search.git
+[submodule "vim/bundle/webapi"]
+ path = vim/bundle/webapi
+ url = git://github.com/mattn/webapi-vim.git
+[submodule "vim/bundle/tomdoc"]
+ path = vim/bundle/tomdoc
+ url = git://github.com/duwanis/tomdoc.vim.git
+[submodule "vim/bundle/extradite"]
+ path = vim/bundle/extradite
+ url = git://github.com/int3/vim-extradite.git
+[submodule "vim/bundle/syntastic"]
+ path = vim/bundle/syntastic
+ url = git://github.com/scrooloose/syntastic.git
+[submodule "vim/bundle/hammer"]
+ path = vim/bundle/hammer
+ url = git://github.com/matthias-guenther/hammer.vim.git
+[submodule "vim/bundle/statline"]
+ path = vim/bundle/statline
+ url = git://github.com/millermedeiros/vim-statline.git
+[submodule "vim/bundle/speeddating"]
+ path = vim/bundle/speeddating
+ url = git://github.com/tpope/vim-speeddating.git
+[submodule "vim/bundle/clam"]
+ path = vim/bundle/clam
+ url = https://github.com/sjl/clam.vim
+[submodule "vim/bundle/afterimage"]
+ path = vim/bundle/afterimage
+ url = git://github.com/tpope/vim-afterimage.git
+[submodule "vim/bundle/vimux"]
+ path = vim/bundle/vimux
+ url = git://github.com/benmills/vimux.git
+[submodule "zsh/bundle/syntax-highlighting"]
+ path = zsh/bundle/syntax-highlighting
+ url = git://github.com/zsh-users/zsh-syntax-highlighting.git
+[submodule "zsh/bundle/completions"]
+ path = zsh/bundle/completions
+ url = git://github.com/zsh-users/zsh-completions.git
+[submodule "zsh/bundle/history-substring-search"]
+ path = zsh/bundle/history-substring-search
+ url = git://github.com/zsh-users/zsh-history-substring-search.git
+[submodule "vim/bundle/turbux"]
+ path = vim/bundle/turbux
+ url = git://github.com/jgdavey/vim-turbux.git
+[submodule "vim/bundle/dbext"]
+ path = vim/bundle/dbext
+ url = git://github.com/vim-scripts/dbext.vim.git
+[submodule "vim/bundle/indent-object"]
+ path = vim/bundle/indent-object
+ url = git://github.com/michaeljsmith/vim-indent-object.git
+[submodule "vim/bundle/scratch"]
+ path = vim/bundle/scratch
+ url = git://github.com/kana/vim-scratch.git
+[submodule "vim/bundle/tagbar"]
+ path = vim/bundle/tagbar
+ url = git://github.com/majutsushi/tagbar.git
+[submodule "vim/bundle/pasta"]
+ path = vim/bundle/pasta
+ url = git://github.com/sickill/vim-pasta.git
+[submodule "vim/bundle/html5"]
+ path = vim/bundle/html5
+ url = git://github.com/othree/html5.vim.git
+[submodule "vim/bundle/solarized"]
+ path = vim/bundle/solarized
+ url = git@github.com:camthompson/vim-colors-solarized.git
+[submodule "vim/bundle/foreplay"]
+ path = vim/bundle/foreplay
+ url = git://github.com/tpope/vim-foreplay.git
+[submodule "vim/bundle/scriptease"]
+ path = vim/bundle/scriptease
+ url = git://github.com/tpope/vim-scriptease.git
+[submodule "vim/bundle/rsi"]
+ path = vim/bundle/rsi
+ url = git://github.com/tpope/vim-rsi.git
+[submodule "vim/bundle/clojure-static"]
+ path = vim/bundle/clojure-static
+ url = git://github.com/guns/vim-clojure-static.git
+[submodule "vim/bundle/nerdtree"]
+ path = vim/bundle/nerdtree
+ url = git://github.com/scrooloose/nerdtree.git
+[submodule "vim/bundle/handlebars"]
+ path = vim/bundle/handlebars
+ url = git://github.com/nono/vim-handlebars.git
+[submodule "vim/bundle/characterize"]
+ path = vim/bundle/characterize
+ url = git://github.com/tpope/vim-characterize.git
+[submodule "vim/bundle/capslock"]
+ path = vim/bundle/capslock
+ url = git://github.com/tpope/vim-capslock.git
+[submodule "vim/bundle/sleuth"]
+ path = vim/bundle/sleuth
+ url = git://github.com/tpope/vim-sleuth.git
9 README.md
@@ -0,0 +1,9 @@
+# Usage
+
+Run the setup script. It __will__ overwrite things in your home directory.
+
+Running the update script goes through and pulls the submodules.
+
+# Credits
+
+A lot of the ZSH stuff is pretty shamelessly ripped from [prezto](https://github.com/sorin-ionescu/prezto).
14 ackrc
@@ -0,0 +1,14 @@
+--sort-files
+
+--ignore-dir=tmp
+--ignore-dir=log
+--ignore-dir=vendor
+
+--type-set=css=css,sass,scss,less
+--type-set=cucumber=feature
+--type-set=markdown=md,mkd,markdown
+--type-set=rdoc=rdoc
+
+--type-add=ruby=haml,rake,erb
+--type-add=html=haml,rb
+--type-add=js=json
24 aprc
@@ -0,0 +1,24 @@
+AwesomePrint.defaults = {
+ :indent => 2,
+ :sort_keys => true,
+ :color => {
+ :args => :greenish,
+ :array => :blue,
+ :bigdecimal => :blue,
+ :class => :yellow,
+ :date => :greenish,
+ :falseclass => :red,
+ :fixnum => :blue,
+ :float => :blue,
+ :hash => :pale,
+ :keyword => :cyan,
+ :method => :purpleish,
+ :nilclass => :red,
+ :string => :yellowish,
+ :struct => :pale,
+ :symbol => :cyanish,
+ :time => :greenish,
+ :trueclass => :green,
+ :variable => :cyanish
+ }
+}
2  bash_profile
@@ -0,0 +1,2 @@
+export PATH="$HOME/.rbenv/bin:$PATH"
+if which rbenv > /dev/null; then eval "$(rbenv init - --no-rehash)"; fi
1  bashrc
@@ -0,0 +1 @@
+export PS1='\h:\w \$ '
79 css/pinboard.in.css
@@ -0,0 +1,79 @@
+#timer{display:none;}
+#logo{margin-left:35px;}
+#pinboard{width:100%;padding:0 !important;margin:0 !important;background-color:#f9f9f9 !important;}
+#banner{background:#444 !important;width:100% !important;min-width:1100px;position:fixed;left:0;padding:8px 0 6px 0 !important;border-bottom:1px solid #222 !important;z-index:10;}
+#banner #top_menu a{opacity:0.2;}
+#banner:hover #top_menu a{opacity:0.8;}
+#banner:after{content:"";background:#EEEEEE;
+background:-moz-linear-gradient(top,#ddd 0%,rgba(255,255,255,0) 100%);
+background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f6f6f6),color-stop(100%,rgba(255,255,255,0)));
+height:15px;position:absolute;top:36px;width:100%;}
+#banner #logo{padding:0 10px;}
+#banner #logo span{position:relative;top:-2px;color:rgba(255,255,255,0.3);}
+#banner #logo span a{color:rgba(245,245,245,0.3) !important;-webkit-transition:color .2s ease-in-out;-moz-transition:color .2s ease-in-out;-o-transition:color .2s ease-in-out;transition:color .2s ease-in-out;}
+#banner #logo span a:hover{color:rgba(245,245,245,1) !important;}
+#banner #pinboard_name{text-transform:lowercase;font-weight:bold;text-shadow:0 -1px 0 rgba(0,0,0,0.5);}
+#banner #logo img{display:none;}
+#banner #top_menu{padding:0 10px;color:#434343;}
+#banner #top_menu a{font-weight:bold;padding:3px 6px !important;text-shadow:-1 -1px 0 #000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;}
+#banner #top_menu a:last-child{display:inline-block;}
+#banner #top_menu a:hover{background:#555;opacity:1;-webkit-box-shadow:1px 0px 4px #111 inset;-moz-box-shadow:1px 0px 4px #111 inset;box-shadow:1px 0px 4px #111 inset;}
+#banner a{color:#fff !important;}
+#main_column,#right_bar{margin-top:60px;}
+#main_column b{font-size:150% !important;}
+#bookmarks div.display a.bookmark_title.unread{font-weight:bold;color:#00749b !important;}
+#bookmarks div.display a.bookmark_title{font-weight:bold;display:inline-block;color:#3b9bba !important;width:580px;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap;padding:0;line-height:1.4em;}
+.user_navbar{position:relative;height:15px;margin:0;}
+.user_navbar>div{line-height:.5em;}
+.bookmark_count_box{position:absolute;width:70px;padding:0;left:-75px;}
+.bookmark_count{background:#eee;float:right;padding:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-weight:bold;position:relative;top:-5px;}
+#nextprev a.edit,#nextprev a#bulk_edit{background:#e5e5e5;padding:2px 10px;text-align:center;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;display:block;float:right;margin-right:5px;text-indent:0px;border:1px solid #bebebe;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;}
+#nextprev a.edit:hover,#nextprev a#bulk_edit:hover{-webkit-box-shadow:1px -1px 4px rgba(0,0,0,0.2) inset;-moz-box-shadow:1px -1px 4px rgba(0,0,0,0.2) inset;box-shadow:1px -1px 4px rgba(0,0,0,0.2) inset;background-color:#eee;text-shadow:1px -1px 1px rgba(0,0,0,0.2);}
+#nextprev table{width:100%;padding-top:10px;}
+#nextprev td{text-indent:-99999px;display:inline-block;float:left;width:auto;}
+#nextprev td:last-of-type{width:300px;float:right;margin-right:35px;}
+#bookmarks a.next_prev{float:left;}
+a.next_prev{display:block;text-indent:0px;border:1px solid #bebebe;margin-right:10px;background:#cee297;padding:2px 10px;text-align:center;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-transition:background .1s ease-in-out;-moz-transition:background .1s ease-in-out;-o-transition:background .1s ease-in-out;transition:background .1s ease-in-out;}
+a.next_prev:hover{-webkit-box-shadow:1px -1px 4px rgba(0,0,0,0.2) inset;-moz-box-shadow:1px -1px 4px rgba(0,0,0,0.2) inset;box-shadow:1px -1px 4px rgba(0,0,0,0.2) inset;text-shadow:1px -1px 1px rgba(0,0,0,0.2);background-color:#d9ef9f;}
+.display{position:relative;}
+.display .when{display:block;clear:left;float:left;padding:7px 3px;}
+.display .edit_links{padding:2px 0;float:left;position:relative;margin-top:4px;}
+.private .display a.tag,.display .tag{-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:block;float:left;padding:1px 6px !important;margin-right:2px;margin-top:2px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;background:#e7f0f0;border:solid 1px rgba(0,0,0,0.1) !important;line-height:100% !important;}
+.display a.cached{position:absolute;left:-40px;top:-1px;opacity:.5;}
+.display .description{display:block;clear:both;margin:5px 0;}
+.display .tag:hover{background:#d9e3e2;}
+#bookmarks .url_link{display:inline-block;float:left;margin-top:5px;background:rgba(209,53,37,0.17) !important;padding:2px 8px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}
+#bookmarks .when{opacity:0.5;}
+#tag_cloud_header p{background:#e4e8eb;padding:8px !important;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
+#tag_cloud a{color:rgba(100,100,100,0.4) !important;-webkit-transition:color .1s ease-in-out;-moz-transition:color .2s ease-in-out;-o-transition:color .2s ease-in-out;transition:color .2s ease-in-out;}
+#tag_cloud a:hover{color:#333 !important;}
+#tag_cloud b{font-size:130% !important;}
+#tag_cloud_header a{color:#1f769e !important;text-shadow:1px 1px 2px rgba(0,0,0,0.2) !important;}
+#footer{margin-bottom:10px;}
+.rss_link{color:#fff !important;font-weight:bold;background:#f28d6e;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
+.display .source{display:inline-block;float:left;padding:5px 0;}
+a.tag{line-height:130%;}
+div.display{width:600px;}
+#bookmarks div.bookmark{-moz-border-radius-topright:25px;-webkit-border-top-right-radius:25px;border-radius-topright:25px;-moz-border-radius-bottomright:25px;-webkit-border-bottom-right-radius:25px;border-radius-bottomright:25px;}
+.private{background:#eee;border:1px solid #ddd}
+.user_navbar>div{text-indent:-99999px;}
+.user_navbar span{text-indent:0;}
+.user_navbar a{display:block;text-indent:0;}
+a.filter{display:block;float:left;text-indent:0;padding:8px;position:relative;top:-6px;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;-o-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}
+a.filter:hover{background:#eee;color:#2f82c4 !important;-webkit-box-shadow:1px -1px 2px rgba(33,33,33,0.5) inset;-moz-box-shadow:1px -1px 2px rgba(33,33,33,0.5) inset;box-shadow:1px -1px 2px rgba(33,33,33,0.5) inset;text-shadow:-1px 1px 1px rgba(33,33,33,0.2);}
+a.twitter_user{color:#1d5669 !important;}
+a.source{color:#1d5669 !important;}
+.selected_star{color:#f9ab59 !important;}
+#footer a:link,#footer a:visited,#footer a:hover,#main_column a:link,#main_column a:visited,#main_column a:hover{color:#1d5669 !important;}
+}
+.small_username{float:left;padding-right:1em;}
+.rss_linkbox{position:fixed;top:13px;left:10px;z-index:99;}
+#searchbox{font-weight:bold;color:#666;}
+#searchbox input{font-weight:bold;color:#666;border:solid 1px #ccc;background:#ddd;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;width:143px;cursor:pointer;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;}
+#searchbox input:hover{background:#eee;}
+#searchbox p{text-align:right;padding-right:8px;}
+#searchbox #fulltext{width:auto;}
+#searchbox #search_field{width:280px;background:#fff;padding:4px;}
+.bookmark{margin-bottom:1em;}
+div.bookmark{-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;}
+div.bookmark:hover{background-color:#fefbef;}
26 ctags
@@ -0,0 +1,26 @@
+--langdef=js
+--langmap=js:.js
+--regex-JavaScript=/([A-Za-z0-9._$\(\)]+)[ \t]*[:=][ \t]*function[ \t]*\(/\1/m,method/
+--regex-JavaScript=/([A-Za-z0-9._$\#\(\)]+)[ \t]*[:][ \t]*([A-Za-z0-9._\-\#\'\"]+)[ \t]*/\1/p,property/
+--regex-JavaScript=/([A-Za-z0-9._$\#\(\)]+)[ \t]*[:][ \t]*([A-Za-z0-9\'\"._\-\#\(]+)[ \t]*\{/\1/p,property/
+--regex-JavaScript=/var ([A-Za-z0-9._$\#]+)[ \t]*[=][ \t]*([A-Za-z0-9._'"\$\#\[\{]+)[,|;]/\1/v,variable/
+--regex-JavaScript=/([A-Za-z0-9._$\#]+)[ \t]*[=][ \t]*([A-Za-z0-9._'"\$\#]+)extend\(/\1/c,class/
+
+--regex-ruby=/(^|[:;])[ \t]*([A-Z][[:alnum:]_]+) *=/\2/c,class,constant/
+--regex-ruby=/(^|;)[ \t]*(has_many|belongs_to|has_one|has_and_belongs_to_many)\(? *:([[:alnum:]_]+)/\3/f,function,association/
+--regex-ruby=/(^|;)[ \t]*(named_)?scope\(? *:([[:alnum:]_]+)/\3/f,function,named_scope/
+--regex-ruby=/(^|;)[ \t]*expose\(? *:([[:alnum:]_]+)/\2/f,function,exposure/
+--regex-ruby=/(^|;)[ \t]*event\(? *:([[:alnum:]_]+)/\2/f,function,aasm_event/
+--regex-ruby=/(^|;)[ \t]*event\(? *:([[:alnum:]_]+)/\2!/f,function,aasm_event/
+--regex-ruby=/(^|;)[ \t]*event\(? *:([[:alnum:]_]+)/\2?/f,function,aasm_event/
+
+--langdef=markdown
+--langmap=markdown:.md.markdown.mdown.mkd.mkdn
+--regex-markdown=/^#[ \t]+(.*)/\1/h,heading1/
+--regex-markdown=/^##[ \t]+(.*)/\1/h,heading2/
+--regex-markdown=/^###[ \t]+(.*)/\1/h,heading3/
+
+--langdef=coffee
+--langmap=coffee:.coffee
+--regex-coffee=/^[ \t]*([A-Za-z.]+)[ \t]+=.*->.*$/\1/f,function/
+--regex-coffee=/^[ \t]*([A-Za-z.]+)[ \t]+=[^->\n]*$/\1/v,variable/
4 curlrc
@@ -0,0 +1,4 @@
+silent
+show-error
+netrc
+header = "Accept: application/json, application/xml, text/plain, */*"
29 cvsignore
@@ -0,0 +1,29 @@
+*.class
+*.o
+*.so
+
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.zip
+
+*.log
+*.sql
+*.sqlite
+
+.DS_Store
+ehthumbs.db
+Icon?
+Thumbs.db
+
+/tags
+tags
+
+/.bundle
+/.bundler_stubs
+
+.netrwhist
3  editrc
@@ -0,0 +1,3 @@
+bind -v
+bind "^R" em-inc-search-prev
+bind \\t rl_complete
2  gemrc
@@ -0,0 +1,2 @@
+install: --no-rdoc --no-ri
+update: --no-rdoc --no-ri
89 gitconfig
@@ -0,0 +1,89 @@
+[user]
+ name = Cam Thompson
+ email = cam@camthompson.com
+[github]
+ user = camthompson
+[core]
+ editor = vim -f
+ excludesfile = ~/.cvsignore
+ autocrlf = false
+ pager = less -FXRS
+[color]
+ branch = auto
+ diff = auto
+ interactive = auto
+ status = auto
+[init]
+ templatedir = ~/.gittemplate
+[web]
+ browser = open
+[credential]
+ helper = osxkeychain
+[merge]
+ tool = fugitive
+ stat = true
+[mergetool "fugitive"]
+ cmd = vim -f -c \"Gdiff\" \"$MERGED\"
+[push]
+ default = tracking
+[diff]
+ mnemonicprefix = true
+ renames = copies
+[advice]
+ statusHints = false
+ pushNonFastForward = false
+[branch]
+ autosetupmerge = true
+[alias]
+ a = add
+ aa = add --all
+ ap = add -p
+ b = branch
+ c = commit --verbose
+ ca = commit --verbose -a
+ caa = commit --verbose -a --amend -C HEAD
+ cam = commit --verbose -am
+ cm = commit --verbose -m
+ d = diff
+ dc = diff --cached
+ dh1 = diff HEAD~1
+ div = divergence
+ f = fetch
+ fa = fetch --all
+ g = grep
+ gn = goodness
+ gnc = goodness --cached
+ h = !git l -1
+ hp = !. ~/.githelpers && show_git_head
+ l = !. ~/.githelpers && pretty_git_log
+ la = !. ~/.githelpers && pretty_git_log --all
+ ls = ls-files
+ lol = log --graph --decorate --pretty=oneline --abbrev-commit
+ lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
+ lp = log --graph --decorate --pretty=oneline --abbrev-commit --all -20
+ m = merge --no-ff
+ mv = mv
+ o = checkout
+ ob = checkout -b
+ p = push
+ r = !git l -30
+ ra = !git r --all
+ rb = rebase
+ rc = rebase --continue
+ re = reset
+ rm = rm
+ rs = rebase --skip
+ rv = remote --verbose
+ s = status --short --ignore-submodules
+ ss = status --short
+ sa = stash apply
+ sd = stash drop
+ sh = stash
+ sl = stash list
+ sm = submodule
+ st = status
+ t = tag
+ u = pull
+ up = !sh -c 'git pull --rebase --prune && git log --pretty=format:\"%Cred%ae %Creset- %C(yellow)%s %Creset(%ar)\" HEAD@{1}..'
+ wat = what-the-hell-just-happened
+ wc = whatchanged -p --abbrev-commit --pretty=medium
43 githelpers
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+# Log output:
+#
+# * 51c333e (12 days) <Gary Bernhardt> add vim-eunuch
+#
+# The time massaging regexes start with ^[^<]* because that ensures that they
+# only operate before the first "<". That "<" will be the beginning of the
+# author name, ensuring that we don't destroy anything in the commit message
+# that looks like time.
+#
+# The log format uses } characters between each field, and `column` is later
+# used to split on them. A } in the commit subject or any other field will
+# break this.
+
+HASH="%C(yellow)%h%Creset"
+RELATIVE_TIME="%Cgreen(%ar)%Creset"
+AUTHOR="%C(bold blue)<%an>%Creset"
+REFS="%C(red)%d%Creset"
+SUBJECT="%s"
+
+FORMAT="$HASH}$REFS $SUBJECT}$RELATIVE_TIME}$AUTHOR"
+
+show_git_head() {
+ pretty_git_log -1
+ git show -p --pretty="tformat:"
+}
+
+pretty_git_log() {
+ git log --graph --pretty="tformat:${FORMAT}" $* |
+ # Replace (2 years ago) with (2 years)
+ sed -Ee 's/ ago\)/)/' |
+ # Replace (2 years, 5 months) with (2 years)
+ sed -Ee 's/(^[^<]*), [[:digit:]]+ .*months?)/\1)/' |
+ # Line columns up based on } delimiter
+ column -s '}' -t |
+ # Page only if we need to
+ less -FXRS
+}
+
+conflicts() {
+ git ls-files --unmerged | cut -f2 | uniq
+}
9 gittemplate/config
@@ -0,0 +1,9 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[branch "master"]
+ remote = origin
+ merge = refs/heads/master
+ rebase = true
7 gittemplate/hooks/ctags
@@ -0,0 +1,7 @@
+#!/bin/sh
+set -e
+PATH="/usr/local/bin:$PATH"
+dir="`git rev-parse --git-dir`"
+trap 'rm -f "$dir/tags.$$"' EXIT
+ctags --tag-relative -Rf$dir/tags.$$ --exclude=.git --languages=-javascript,sql
+mv $dir/tags.$$ $dir/tags
2  gittemplate/hooks/post-checkout
@@ -0,0 +1,2 @@
+#!/bin/sh
+.git/hooks/ctags >/dev/null 2>&1 &
2  gittemplate/hooks/post-commit
@@ -0,0 +1,2 @@
+#!/bin/sh
+.git/hooks/ctags >/dev/null 2>&1 &
2  gittemplate/hooks/post-merge
@@ -0,0 +1,2 @@
+#!/bin/sh
+.git/hooks/ctags >/dev/null 2>&1 &
4 gittemplate/hooks/post-rewrite
@@ -0,0 +1,4 @@
+#!/bin/sh
+case "$1" in
+ rebase) exec .git/hooks/post-merge ;;
+esac
3  gittemplate/info/attributes
@@ -0,0 +1,3 @@
+Gemfile.lock merge=bundle
+db/schema.rb merge=railsschema
+*.rb diff=ruby
37 global.gems
@@ -0,0 +1,37 @@
+gem-ctags
+rbenv-rehash
+bundler
+rake
+awesome_print
+pry
+pry-doc
+pry-debugger
+pry-stack_explorer
+pry-rescue
+pry-exception_explorer
+pry-syntax-hacks
+pry-editline
+interactive_editor
+hirb
+wirble
+github
+hookup
+laser --prerelease
+vagrant
+debugger
+github-markup
+tilt
+lunchy
+cheat
+gem-browse
+redcarpet
+foreman
+rspec
+cucumber
+rails
+capistrano
+brakeman
+haml
+sass
+clipboard
+powder
53 gvimrc
@@ -0,0 +1,53 @@
+if filereadable(expand("~/.gvimrc.before"))
+ source ~/.gvimrc.before
+endif
+
+set guipty "attempts pseudo-tty
+set co=90 "number of columns
+set guioptions-=T "hide toolbar
+set guioptions-=t "hide tearoff menu items
+set guioptions-=l "hide left scrollbar
+set guioptions-=L "hide left scrollbar when vert window split
+set guioptions-=r "hide right scrollbar
+set guioptions-=R "hide right scrollbar when vert window split
+if has('fullscreen')
+ set fuoptions=maxvert,maxhorz,background:Normal "fullscreen options
+end
+
+set guicursor=n-c:block-Cursor-blinkon0
+set guicursor+=v:block-Cursor-blinkon0
+set guicursor+=i-ci:ver10-Cursor-blinkon0
+
+if has("gui_macvim")
+ let macvim_skip_cmd_opt_movement = 1
+ noremap <D-Left> <Home>
+ noremap! <D-Left> <Home>
+ noremap <M-Left> <C-Left>
+ noremap! <M-Left> <C-Left>
+
+ noremap <D-Right> <End>
+ noremap! <D-Right> <End>
+ noremap <M-Right> <C-Right>
+ noremap! <M-Right> <C-Right>
+
+ noremap <D-Up> <C-Home>
+ inoremap <D-Up> <C-Home>
+ imap <M-Up> <C-o>{
+
+ noremap <D-Down> <C-End>
+ inoremap <D-Down> <C-End>
+ imap <M-Down> <C-o>}
+
+ imap <M-BS> <C-w>
+ inoremap <D-BS> <esc>my0c`y
+
+ noremap <d-1> :e ~/Dropbox/Notes/inbox.txt<cr>
+ noremap <d-2> :lcd ~/Dropbox/Notes<cr>:CtrlP<cr>
+ noremap <d-3> :e $MYVIMRC<cr>
+ noremap <d-4> :e $MYGVIMRC<cr>
+ noremap <d-5> :so $MYVIMRC<cr>:so $MYGVIMRC<cr>
+endif
+
+if filereadable(expand("~/.gvimrc.after"))
+ source ~/.gvimrc.after
+endif
5 hgrc
@@ -0,0 +1,5 @@
+[merge-tools]
+threesome.executable = vim
+threesome.args = -f $BASE $LOCAL $REMOTE $MERGED -c 'SpliceInit'
+threesome.premerge = keep
+threesome.priority = 1
12 inputrc
@@ -0,0 +1,12 @@
+set editing-mode vi
+
+tab: complete
+set completion-ignore-case on
+set page-completions on
+
+set keymap vi-insert
+"\C-l": clear-screen
+"\C-w": backward-kill-word
+"\C-a": beginning-of-line
+"\C-e": end-of-line
+"\C-u": kill-whole-line
88 irbrc
@@ -0,0 +1,88 @@
+if defined?(::Bundler)
+ global_gemset = ENV['GEM_PATH'].split(':').grep(/ruby.*@global/).first
+ if global_gemset
+ all_global_gem_paths = Dir.glob("#{global_gemset}/gems/*")
+ all_global_gem_paths.each do |p|
+ gem_path = "#{p}/lib"
+ $LOAD_PATH << gem_path
+ end
+ end
+end
+
+# begin
+# require 'pry'
+# Pry.start
+# exit
+# rescue LoadError
+# end
+
+begin
+ IRB.conf[:AUTO_INDENT] = true
+
+ require 'irb/ext/save-history'
+ IRB.conf[:SAVE_HISTORY] = 1000
+ IRB.conf[:EVAL_HISTORY] = 100
+ IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb_history"
+
+ require 'irb/completion'
+ IRB.conf[:USE_READLINE] = true
+ IRB.conf[:PROMPT_MODE] = :SIMPLE
+ require 'pp'
+rescue Object => ex
+ puts "ERROR : #{ex.inspect}"
+end
+
+begin
+ require 'interactive_editor'
+ alias v vim
+rescue LoadError
+ puts 'Interactive editor not available'
+end
+
+begin
+ require 'ap'
+ alias p ap
+rescue LoadError
+ puts 'Awesome print not available'
+end
+
+begin
+ require 'Wirble'
+ Wirble.init
+ Wirble.colorize
+rescue LoadError
+ puts 'Wirble not available'
+end
+
+begin
+ require 'hirb'
+ Hirb.enable
+rescue LoadError
+ puts 'Hirb not available'
+end
+
+class Array
+ def self.toy(i=10)
+ (1..i).to_a
+ end
+end
+
+class Hash
+ def self.toy(i=10)
+ h = {}
+ (1..i).each { |x| h[(x+96).chr.to_sym] = x }
+ h
+ end
+end
+
+alias q exit
+
+def time(&block)
+ require 'benchmark'
+ result = nil
+ timing = Benchmark.measure do
+ result = block.()
+ end
+ puts "It took: #{timing}"
+ result
+end
319 irssi/cam.theme
@@ -0,0 +1,319 @@
+# My theme: based on the solarized-universal theme
+# Also references https://github.com/pbrisbin/irssi-config/blob/master/pbrisbin.theme
+
+# text text background
+# ---------------------------------------------------------------------
+# %k %K %0 black dark grey black
+# %r %R %1 red bold red red
+# %g %G %2 green bold green green
+# %y %Y %3 yellow bold yellow yellow
+# %b %B %4 blue bold blue blue
+# %m %M %5 magenta bold magenta magenta
+# %p %P magenta (think: purple)
+# %c %C %6 cyan bold cyan cyan
+# %w %W %7 white bold white white
+# %n %N Changes the color to "default color", removing
+# all other coloring and formatting. %N is always
+# the terminal's default color. %n is usually too,
+# except in themes it changes to "previous color",
+# ie. hello = "%Rhello%n" and "%G{hello} world"
+# would print hello in red, and %n would turn back
+# into %G making world green.
+# %F Blinking on/off (think: flash)
+# %U Underline on/off
+# %8 Reverse on/off
+# %9 %_ Bold on/off
+# %: Insert newline
+# %| Marks the indentation position
+# %# Monospace font on/off (useful with lists and GUI)
+# %% A single %
+
+# default foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+replaces = { "[]=" = "%K$*%n"; };
+
+abstracts = {
+ ##
+ ## generic
+ ##
+
+ # text to insert at the beginning of each non-message line
+ # %| probably right-aligns
+ line_start = "%c::%n";
+
+ # timestamp styling, nothing by default
+ timestamp = "%k$0-%n";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%m$*%n";
+
+ # any kind of error message, default is bright red
+ # error = "%r$*%n";
+
+ # channel name is printed
+ # channel = "$*";
+
+ # nick is printed
+ # nick = "$*";
+
+ # nick host is printed
+ # (that's the "email" address of a user)
+ # nickhost = "<$*>";
+
+ # server name is printed
+ # server = "$*";
+
+ # some kind of comment is printed
+ # comment = "($*)";
+
+ # reason for something is printed (part, quit, kick, ..)
+ # reason = "{comment $*}";
+
+ # mode change is printed ([+o nick])
+ # mode = "{comment $*}";
+
+ ##
+ ## channel specific messages
+ ##
+
+ # highlighted nick/host is printed (joins)
+ # NOTE: %n doesn't work in irssi v0.8.15 for some reason. So we have to end with the same color as line_start
+ # channick_hilight = "%c$*%G";
+ # chanhost_hilight = "{nickhost $*}";
+
+ # nick/host is printed (parts, quits, etc.)
+ #channick = "%c$*%n";
+ # chanhost = "{nickhost $*}";
+
+ # highlighted channel name is printed
+ # channelhilight = "%c$*%n";
+
+ # ban/ban exception/invite list mask is printed
+ # ban = "%R$*%n";
+
+ ##
+ ## messages
+ ##
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ msgnick = "$0$1: %|";
+
+ # message from you is printed. "msgownnick" specifies the styling of the
+ # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
+ # whole line.
+
+ # Example1: You want the message text to be green:
+ # ownmsgnick = "{msgnick $0 $1-}%g";
+ # Example2.1: You want < and > chars to be yellow:
+ # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
+ # (you'll also have to remove <> from replaces list above)
+ # Example2.2: But you still want to keep <> grey for other messages:
+ # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
+ # ownprivmsgnick = "%K{msgnick $*%K}%n";
+ # privmsgnick = "%K{msgnick %R$*%K}%n";
+
+ # $0 = nick mode, $1 = nick
+ ownmsgnick = "{msgnick $0 $1-}%b";
+ ownnick = "%b$*%n";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ # pubmsgnick = "{msgnick $0 $1-}";
+ # pubnick = "%N%_$*%_%n";
+
+ # public message in channel meant for me, $0 = nick mode, $1 = nick
+ pubmsgmenick = "{msgnick $0 $1-}%m";
+ menick = "%m$*%n";
+
+ # public highlighted message in channel
+ # $0 = highlight color, $1 = nick mode, $2 = nick
+ pubmsghinick = "{msgnick $1 $0$2-}%m";
+
+ # channel name is printed with message
+ # This is printed whenever the channel name is printed for disambiguation, e.g.
+ # while there is a query in the same window. Example: <+funnyuser:#test> hello
+ # msgchannel = "%G:%c$*%n";
+
+ # private message, $0 = nick, $1 = host
+ # privmsg = "[%m$0%G<%n$1-%G>%n] ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ # ownprivmsg = "[%b$0%K<%B$1-%K>%n] ";
+
+ # own private message in query
+ # ownprivmsgnick = "{msgnick $*}%b";
+ # ownprivnick = "%b$*%n";
+
+ # private message in query
+ # NOTE: for some reason, we gotta handle both the nick & msg on in this line
+ # privmsgnick = "{msgnick %m$*%n}%m";
+
+ ##
+ ## Actions (/ME stuff)
+ ##
+
+ # used internally by this theme
+ action_core = "%M$*";
+
+ # generic one that's used by most actions
+ action = "{action_core $*} ";
+
+ # own action, both private/public
+ #ownaction = "{action_core $*} ";
+
+ # own action with target, both private/public
+ # NOTE: to test: /action NICK farted. (This will tell NICK that you farted)
+ # This is like a /me but only you and NICK will see
+ ownaction_target = "{action_core $*}";
+
+ # private action sent by others
+ pvtaction = "{action $*}";
+ pvtaction_query = "{action $*}";
+
+ # public action sent by others
+ pubaction = "{action $*}";
+
+
+ ##
+ ## other IRC events
+ ##
+
+ # whois
+ # whois = "%# $[8]0 : $1-";
+
+ # notices
+ # ownnotice = "[%b$0%G(%b$1-%G)]%n ";
+ # notice = "%G-%M$*%G-%n ";
+ # pubnotice_channel = "%G:%m$*";
+ # pvtnotice_host = "%G(%m$*%G)";
+ # servernotice = "%g!$*%n ";
+
+ # CTCPs
+ # ownctcp = "[%b$0%G(%b$1-%G)] ";
+ # ctcp = "%g$*%n";
+
+ # wallops
+ # wallop = "%c$*%n: ";
+ # wallop_nick = "%n$*";
+ # wallop_action = "%c * $*%n ";
+
+ # netsplits
+ # netsplit = "%r$*%n";
+ # netjoin = "%g$*%n";
+
+ # /names list
+ # names_prefix = "";
+ # names_nick = "[$0$1] ";
+ # names_nick_op = "{names_nick $*}";
+ # names_nick_halfop = "{names_nick $*}";
+ # names_nick_voice = "{names_nick $*}";
+ # names_users = "[%g$*%n]";
+ # names_channel = "%c$*%n";
+
+ # DCC
+ # dcc = "%g$*%n";
+ # dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ #dccownmsg = "[%r$0%K($1-%K)%n] ";
+ # dccownmsg = "[%b$0%G($1-%G)%n] ";
+ # dccownnick = "%b$*%n";
+ # dccownquerynick = "%c$*%n";
+ # dccownaction = "{action $*}";
+ # dccownaction_target = "{action_core $0}%G:%c$1%n ";
+
+ # DCC chat, others
+ #dccmsg = "[%G$1-%K(%g$0%K)%n] ";
+ # dccmsg = "[%g$1-%G($0%G)%n] ";
+ # dccquerynick = "%g$*%n";
+ # dccaction = "%c (*dcc*) $*%n %|";
+
+ ##
+ ## statusbar
+ ##
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ # NOTE: if all the other overriding settings below are set, this only seems to affect
+ # the content parts of the adv_windowlist. Default seems to be blue
+ # NOTE: if not set, the default background seems to be %w%4 = white on blue
+ sb_background = "%w%0";
+
+ # default backround for "default" statusbar group
+ # NOTE: this impacts the statusbar of an inactive window and the edges of adv_windowlist
+ sb_default_bg = "%B%0";
+
+ # background for topicbar at the top (defaults to sb_default_bg)
+ sb_topic_bg = "%w%0";
+
+ # background for the statusbar of active window. You can also give
+ # the foreground color.
+ sb_window_bg = "%w%2";
+
+ # background for prompt / input line
+ sb_prompt_bg = "%n";
+ # background for info statusbar
+ # %8 = reverse window
+ sb_info_bg = "%8";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = " ";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = " ";
+
+ topicsbstart = "{sbstart $*}";
+ topicsbend = "{sbend $*}";
+
+ #prompt = "$c$*> ";
+
+ # This controls each part of a statusbor, including the outer brackets of adv_windowlist
+ sb = "$* ";
+ # The mode is next to your NICK and the channel
+ sbmode = "(+$*)";
+ sbaway = " (away)";
+ sbservertag = ":$0 ";
+ sbnickmode = "$0";
+
+ # activity in statusbar
+
+ # ',' separator between the window numbers
+ sb_act_sep = "";
+ # normal text
+ # This also affects the color of the window with activity in adv_windowlist
+ sb_act_text = "%m$*";
+ # public message (ordinary messages)
+ sb_act_msg = "%m$*";
+ # hilight (when people actually chat)
+ # This also affects the color of the window with direct message in adv_windowlist
+ sb_act_hilight = "%m$*";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "$0$1-%n";
+};
+formats = {
+ "fe-common/core" = {
+ own_msg = "{ownmsgnick {ownnick $[-15]0$2}}$1";
+ own_msg_channel = "{ownmsgnick {ownnick $[-15]0$3}{msgchannel $1}}$2";
+ own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-15]2}}$1";
+ pubmsg_me = "{pubmsgmenick {menick $[-15]0}$2}$1";
+ pubmsg_me_channel = "{pubmsgmenick {menick $[-15]0$3}{msgchannel $1}}$2";
+ pubmsg_hilight = "{pubmsghinick $0 $0 $[-15]1$3%n}$2";
+ pubmsg_hilight_channel = "{pubmsghinick $0 $[-15]1$4{msgchannel $2}}$3";
+ pubmsg = "{pubmsgnick {pubnick %w$[-15]0}$2}$1";
+ pubmsg_channel = "{pubmsgnick {pubnick %w$[-15]0}$2}$1";
+ msg_private_query = "{privmsgnick $[-15]0}$2";
+ };
+ "fe-common/irc" = {
+ own_action = "{ownaction $[-13]0} $1";
+ action_private = "{pvtaction $[-13]0}$1";
+ action_private_query = "{pvtaction_query $[-13]0} $2";
+ action_public = "{pubaction $[-13]0}$1";
+ };
+};
295 irssi/config
@@ -0,0 +1,295 @@
+servers = (
+ {
+ address = "card.freenode.net";
+ autoconnect = "yes";
+ chatnet = "freenode";
+ port = "6697";
+ use_ssl = "yes";
+ ssl_verify = "yes";
+ },
+ { address = "localhost"; autoconnect = "yes"; chatnet = "bitlbee"; }
+);
+
+chatnets = { bitlbee = { type = "IRC"; }; freenode = { type = "IRC"; }; };
+
+channels = (
+ { name = "#5by5"; chatnet = "freenode"; autojoin = "Yes"; },
+ { name = "#vim"; chatnet = "freenode"; autojoin = "Yes"; },
+ { name = "#zsh"; chatnet = "freenode"; autojoin = "Yes"; },
+ { name = "#git"; chatnet = "freenode"; autojoin = "Yes"; }
+);
+
+aliases = {
+ J = "join";
+ WJOIN = "join -window";
+ WQUERY = "query -window";
+ LEAVE = "part";
+ BYE = "quit";
+ EXIT = "quit";
+ SIGNOFF = "quit";
+ DESCRIBE = "action";
+ DATE = "time";
+ HOST = "userhost";
+ LAST = "lastlog";
+ SAY = "msg *";
+ WI = "whois";
+ WII = "whois $0 $0";
+ WW = "whowas";
+ W = "who";
+ N = "names";
+ M = "msg";
+ T = "topic";
+ C = "clear";
+ CL = "clear";
+ K = "kick";
+ KB = "kickban";
+ KN = "knockout";
+ BANS = "ban";
+ B = "ban";
+ MUB = "unban *";
+ UB = "unban";
+ IG = "ignore";
+ UNIG = "unignore";
+ SB = "scrollback";
+ UMODE = "mode $N";
+ WC = "window close";
+ WN = "window new hide";
+ SV = "say Irssi $J ($V) - http://irssi.org/";
+ GOTO = "sb goto";
+ CHAT = "dcc chat";
+ RUN = "SCRIPT LOAD";
+ CALC = "exec - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
+ SBAR = "STATUSBAR";
+ INVITELIST = "mode $C +I";
+ Q = "QUERY";
+ "MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save";
+ EXEMPTLIST = "mode $C +e";
+ ATAG = "WINDOW SERVER";
+ UNSET = "set -clear";
+ RESET = "set -default";
+};
+
+statusbar = {
+ # formats:
+ # when using {templates}, the template is shown only if it's argument isn't
+ # empty unless no argument is given. for example {sb} is printed always,
+ # but {sb $T} is printed only if $T isn't empty.
+
+ items = {
+ # start/end text in statusbars
+ barstart = "{sbstart}";
+ barend = "{sbend}";
+
+ topicbarstart = "{topicsbstart}";
+ topicbarend = "{topicsbend}";
+
+ # treated "normally", you could change the time/user name to whatever
+ user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}";
+
+ # treated specially .. window is printed with non-empty windows,
+ # window_empty is printed with empty windows
+ window = "{sb [$winref] $tag $itemname}";
+ window_empty = "{sb $winname}";
+ prompt = "{prompt}";
+ prompt_empty = "{prompt}";
+ topic = " $topic";
+ topic_empty = " Irssi v$J - http://www.irssi.org";
+
+ # all of these treated specially, they're only displayed when needed
+ lag = "{sb Lag: %R$0-%n}⮁ ";
+ act = "{sb Act: $0-}⮁ ";
+ more = "%k%3-- more --%n";
+ };
+
+ # there's two type of statusbars. root statusbars are either at the top
+ # of the screen or at the bottom of the screen. window statusbars are at
+ # the top/bottom of each split window in screen.
+ default = {
+ # the "default statusbar" to be displayed at the bottom of the window.
+ # contains all the normal items.
+ window = {
+ disabled = "yes";
+
+ # window, root
+ type = "window";
+ # top, bottom
+ placement = "bottom";
+ # number
+ position = "1";
+ # active, inactive, always
+ visible = "active";
+
+ # list of items in statusbar in the display order
+ items = {
+ barstart = { priority = "100"; };
+ user = { };
+ window = { };
+ window_empty = { };
+ lag = { priority = "-1"; };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ usercount = { };
+ };
+ };
+
+ # statusbar to use in inactive split windows
+ window_inact = {
+ type = "window";
+ placement = "bottom";
+ position = "1";
+ visible = "inactive";
+ items = {
+ barstart = { priority = "100"; };
+ window = { };
+ window_empty = { };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+
+ # we treat input line as yet another statusbar :) It's possible to
+ # add other items before or after the input line item.
+
+ # topicbar
+ topic = {
+ type = "root";
+ placement = "top";
+ position = "1";
+ visible = "always";
+ items = {
+ topicbarstart = { priority = "100"; };
+ topic = { };
+ topic_empty = { };
+ topicbarend = { priority = "100"; alignment = "right"; };
+ };
+ };
+ prompt = {
+ items = {
+ uberprompt = { priority = "-1"; };
+ input = { priority = "10"; };
+ };
+ position = "100";
+ };
+ awl_0 = {
+ items = {
+ barstart = { priority = "100"; };
+ awl_0 = { };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+ };
+};
+settings = {
+ core = {
+ real_name = "Cam Thompson";
+ user_name = "camt";
+ nick = "camt";
+ };
+ "fe-text" = { actlist_sort = "refnum"; };
+ "fe-common/core" = {
+ theme = "cam";
+ hilight_color = "= %m";
+ show_names_on_join = "no";
+ };
+ "irc/core" = { alternate_nick = "camth"; };
+ "perl/core/scripts" = {
+ awl_display_key = " %w$H$N $C $S";
+ awl_display_key_active = "$H%k%4⮀ %W$N ⮁ $C %b%0⮀ $S";
+ awl_separator = " ";
+ neat_colorize = "yes";
+ screen_away_active = "yes";
+ screen_away_message = "AFK";
+ neat_colors = "rRgGyYbMck";
+ neat_allow_shrinking = "yes";
+ neat_maxlength = "15";
+ trackbar_style = "%b";
+ growl_show_message_action = "no";
+ growl_show_channel_topic = "no";
+ trackbar_hide_windows = "(status),hilight";
+ uberprompt_format = "$uber";
+ uberprompt_format_empty = "$N($usermode)$A > ";
+ };
+ "irc/dcc" = { dcc_download_path = "~"; dcc_timeout = "180"; };
+};
+hilights = (
+ {
+ text = "camt";
+ color = "%M";
+ nick = "yes";
+ word = "yes";
+ fullword = "yes";
+ },
+ {
+ text = "camthompson.com";
+ color = "%M";
+ nick = "no";
+ word = "yes";
+ fullword = "no";
+ }
+);
+ignores = (
+ {
+ level = "JOINS PARTS QUITS NICKS";
+ channels = ( "#vim", "#5by5", "#git", "#zsh" );
+ },
+ { level = "MODES"; channels = ( "&bitlbee" ); }
+);
+logs = { };
+windows = {
+ 1 = { immortal = "yes"; name = "(status)"; level = "ALL"; };
+ 2 = { name = "hilight"; sticky = "yes"; };
+ 3 = {
+ items = (
+ {
+ type = "CHANNEL";
+ chat_type = "IRC";
+ name = "&bitlbee";
+ tag = "bitlbee";
+ }
+ );
+ };
+ 4 = {
+ items = (
+ {
+ type = "CHANNEL";
+ chat_type = "IRC";
+ name = "#5by5";
+ tag = "freenode";
+ }
+ );
+ };
+ 5 = {
+ items = (
+ {
+ type = "CHANNEL";
+ chat_type = "IRC";
+ name = "#vim";
+ tag = "freenode";
+ }
+ );
+ };
+ 6 = {
+ items = (
+ {
+ type = "CHANNEL";
+ chat_type = "IRC";
+ name = "#zsh";
+ tag = "freenode";
+ }
+ );
+ };
+ 7 = {
+ items = (
+ {
+ type = "CHANNEL";
+ chat_type = "IRC";
+ name = "#git";
+ tag = "freenode";
+ }
+ );
+ };
+};
+mainwindows = {
+ 3 = { first_line = "9"; lines = "42"; };
+ 2 = { first_line = "1"; lines = "8"; };
+};
294 irssi/default.theme
@@ -0,0 +1,294 @@
+# When testing changes, the easiest way to reload the theme is with /RELOAD.
+# This reloads the configuration file too, so if you did any changes remember
+# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
+# old data so keep backups :)
+
+# TEMPLATES:
+
+# The real text formats that irssi uses are the ones you can find with
+# /FORMAT command. Back in the old days all the colors and texts were mixed
+# up in those formats, and it was really hard to change the colors since you
+# might have had to change them in tens of different places. So, then came
+# this templating system.
+
+# Now the /FORMATs don't have any colors in them, and they also have very
+# little other styling. Most of the stuff you need to change is in this
+# theme file. If you can't change something here, you can always go back
+# to change the /FORMATs directly, they're also saved in these .theme files.
+
+# So .. the templates. They're those {blahblah} parts you see all over the
+# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
+# When irssi sees this kind of text, it goes to find "name" from abstracts
+# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
+# can have more parameters of course). Templates can have subtemplates.
+# Here's a small example:
+# /FORMAT format hello {colorify {underline world}}
+# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
+# When irssi expands the templates in "format", the final string would be:
+# hello %G%Uworld%U%n
+# ie. underlined bright green "world" text.
+# and why "$0-", why not "$0"? $0 would only mean the first parameter,
+# $0- means all the parameters. With {underline hello world} you'd really
+# want to underline both of the words, not just the hello (and world would
+# actually be removed entirely).
+
+# COLORS:
+
+# You can find definitions for the color format codes in docs/formats.txt.
+
+# There's one difference here though. %n format. Normally it means the
+# default color of the terminal (white mostly), but here it means the
+# "reset color back to the one it was in higher template". For example
+# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
+# print yellow "foo" (as set with %Y) but "bar" would be green, which was
+# set at the beginning before the {foo} template. If there wasn't the %g
+# at start, the normal behaviour of %n would occur. If you _really_ want
+# to use the terminal's default color, use %N.
+
+#############################################################################
+
+# default foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+# (dark grey by default)
+replaces = { "[]=" = "%K$*%n"; };
+
+abstracts = {
+ ##
+ ## generic
+ ##
+
+ # text to insert at the beginning of each non-message line
+ line_start = "%B-%n!%B-%n ";
+
+ # timestamp styling, nothing by default
+ timestamp = "$*";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%_$*%_";
+
+ # any kind of error message, default is bright red
+ error = "%R$*%n";
+
+ # channel name is printed
+ channel = "%_$*%_";
+
+ # nick is printed
+ nick = "%_$*%_";
+
+ # nick host is printed
+ nickhost = "[$*]";
+
+ # server name is printed
+ server = "%_$*%_";
+
+ # some kind of comment is printed
+ comment = "[$*]";
+
+ # reason for something is printed (part, quit, kick, ..)
+ reason = "{comment $*}";
+
+ # mode change is printed ([+o nick])
+ mode = "{comment $*}";
+
+ ##
+ ## channel specific messages
+ ##
+
+ # highlighted nick/host is printed (joins)
+ channick_hilight = "%C$*%n";
+ chanhost_hilight = "{nickhost %c$*%n}";
+
+ # nick/host is printed (parts, quits, etc.)
+ channick = "%c$*%n";
+ chanhost = "{nickhost $*}";
+
+ # highlighted channel name is printed
+ channelhilight = "%c$*%n";
+
+ # ban/ban exception/invite list mask is printed
+ ban = "%c$*%n";
+
+ ##
+ ## messages
+ ##
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ msgnick = "%K<%n$0$1-%K>%n %|";
+
+ # message from you is printed. "msgownnick" specifies the styling of the
+ # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
+ # whole line.
+
+ # Example1: You want the message text to be green:
+ # ownmsgnick = "{msgnick $0 $1-}%g";
+ # Example2.1: You want < and > chars to be yellow:
+ # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
+ # (you'll also have to remove <> from replaces list above)
+ # Example2.2: But you still want to keep <> grey for other messages:
+ # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
+ # ownprivmsgnick = "%K{msgnick $*%K}%n";
+ # privmsgnick = "%K{msgnick %R$*%K}%n";
+
+ # $0 = nick mode, $1 = nick
+ ownmsgnick = "{msgnick $0 $1-}";
+ ownnick = "%_$*%n";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ pubmsgnick = "{msgnick $0 $1-}";
+ pubnick = "%N$*%n";
+
+ # public message in channel meant for me, $0 = nick mode, $1 = nick
+ pubmsgmenick = "{msgnick $0 $1-}";
+ menick = "%Y$*%n";
+
+ # public highlighted message in channel
+ # $0 = highlight color, $1 = nick mode, $2 = nick
+ pubmsghinick = "{msgnick $1 $0$2-%n}";
+
+ # channel name is printed with message
+ msgchannel = "%K:%c$*%n";
+
+ # private message, $0 = nick, $1 = host
+ privmsg = "[%R$0%K(%r$1-%K)%n] ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ ownprivmsg = "[%r$0%K(%R$1-%K)%n] ";
+
+ # own private message in query
+ ownprivmsgnick = "{msgnick $*}";
+ ownprivnick = "%_$*%n";
+
+ # private message in query
+ privmsgnick = "{msgnick %R$*%n}";
+
+ ##
+ ## Actions (/ME stuff)
+ ##
+
+ # used internally by this theme
+ action_core = "%_ * $*%n";
+
+ # generic one that's used by most actions
+ action = "{action_core $*} ";
+
+ # own action, both private/public
+ ownaction = "{action $*}";
+
+ # own action with target, both private/public
+ ownaction_target = "{action_core $0}%K:%c$1%n ";
+
+ # private action sent by others
+ pvtaction = "%_ (*) $*%n ";
+ pvtaction_query = "{action $*}";
+
+ # public action sent by others
+ pubaction = "{action $*}";
+
+
+ ##
+ ## other IRC events
+ ##
+
+ # whois
+ whois = "%# $[8]0 : $1-";
+
+ # notices
+ ownnotice = "[%r$0%K(%R$1-%K)]%n ";
+ notice = "%K-%M$*%K-%n ";
+ pubnotice_channel = "%K:%m$*";
+ pvtnotice_host = "%K(%m$*%K)";
+ servernotice = "%g!$*%n ";
+
+ # CTCPs
+ ownctcp = "[%r$0%K(%R$1-%K)] ";
+ ctcp = "%g$*%n";
+
+ # wallops
+ wallop = "%_$*%n: ";
+ wallop_nick = "%n$*";
+ wallop_action = "%_ * $*%n ";
+
+ # netsplits
+ netsplit = "%R$*%n";
+ netjoin = "%C$*%n";
+
+ # /names list
+ names_prefix = "";
+ names_nick = "[%_$0%_$1-] ";
+ names_nick_op = "{names_nick $*}";
+ names_nick_halfop = "{names_nick $*}";
+ names_nick_voice = "{names_nick $*}";
+ names_users = "[%g$*%n]";
+ names_channel = "%G$*%n";
+
+ # DCC
+ dcc = "%g$*%n";
+ dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ dccownmsg = "[%r$0%K($1-%K)%n] ";
+ dccownnick = "%R$*%n";
+ dccownquerynick = "%_$*%n";
+ dccownaction = "{action $*}";
+ dccownaction_target = "{action_core $0}%K:%c$1%n ";
+
+ # DCC chat, others
+ dccmsg = "[%G$1-%K(%g$0%K)%n] ";
+ dccquerynick = "%G$*%n";
+ dccaction = "%_ (*dcc*) $*%n %|";
+
+ ##
+ ## statusbar
+ ##
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ sb_background = "%4%w";
+
+ # default backround for "default" statusbar group
+ #sb_default_bg = "%4";
+ # background for prompt / input line
+ sb_prompt_bg = "%n";
+ # background for info statusbar
+ sb_info_bg = "%8";
+ # background for topicbar (same default)
+ #sb_topic_bg = "%4";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = "";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = " ";
+
+ topicsbstart = "{sbstart $*}";
+ topicsbend = "{sbend $*}";
+
+ prompt = "[$*] ";
+
+ sb = " %c[%n$*%c]%n";
+ sbmode = "(%c+%n$*)";
+ sbaway = " (%GzZzZ%n)";
+ sbservertag = ":$0 (change with ^X)";
+ sbnickmode = "$0";
+
+ # activity in statusbar
+
+ # ',' separator
+ sb_act_sep = "%c$*";
+ # normal text
+ sb_act_text = "%c$*";
+ # public message
+ sb_act_msg = "%W$*";
+ # hilight
+ sb_act_hilight = "%M$*";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "$0$1-%n";
+};
1  irssi/sasl.auth.example
@@ -0,0 +1 @@
+network user password DH-BLOWFISH
2,478 irssi/scripts/adv_windowlist.pl
@@ -0,0 +1,2478 @@
+use strict; # use warnings;
+
+# {{{ debug
+
+#BEGIN {
+# open STDERR, '>', '/home/ailin/wlstatwarnings';
+#};
+
+# FIXME COULD SOMEONE PLEASE TELL ME HOW TO SHUT UP
+#
+# ...
+# Variable "*" will not stay shared at (eval *) line *.
+# Variable "*" will not stay shared at (eval *) line *.
+# ...
+# Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at (eval *) line *.
+# ...
+#
+# THANKS
+
+# }}}
+
+# if you don't know how to operate folds, type zn
+
+# {{{ header
+
+use Irssi (); # which is the minimum required version of Irssi ?
+use Irssi::TextUI;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION = '0.6ca';
+%IRSSI = (
+ original_authors => q(BC-bd, Veli, Timo Sirainen, ).
+ q(Wouter Coekaerts, Jean-Yves Lefort), # (decadix)
+ original_contact => q(bd@bc-bd.org, veli@piipiip.net, tss@iki.fi, ).
+ q(wouter@coekaerts.be, jylefort@brutele.be),
+ authors => q(Nei),
+ contact => q(Nei @ anti@conference.jabber.teamidiot.de),
+ url => "http://anti.teamidiot.de/",
+ name => q(awl),
+ description => q(Adds a permanent advanced window list on the right or ).
+ q(in a statusbar.),
+ description2 => q(Based on chanact.pl which was apparently based on ).
+ q(lightbar.c and nicklist.pl with various other ideas ).
+ q(from random scripts.),
+ license => q(GNU GPLv2 or later),
+);
+
+# }}}
+
+# {{{ *** D O C U M E N T A T I O N ***
+
+# adapted by Nei
+
+###############
+# {{{ original comment
+# ###########
+# # Adds new powerful and customizable [Act: ...] item (chanelnames,modes,alias).
+# # Lets you give alias characters to windows so that you can select those with
+# # meta-<char>.
+# #
+# # for irssi 0.8.2 by bd@bc-bd.org
+# #
+# # inspired by chanlist.pl by 'cumol@hammerhart.de'
+# #
+# #########
+# # {{{ Contributors
+# #########
+# #
+# # veli@piipiip.net /window_alias code
+# # qrczak@knm.org.pl chanact_abbreviate_names
+# # qerub@home.se Extra chanact_show_mode and chanact_chop_status
+# # }}}
+# }}}
+#
+# {{{ FURTHER THANKS TO
+# ############
+# # buu, fxn, Somni, Khisanth, integral, tybalt89 for much support in any aspect perl
+# # and the channel in general ( #perl @ freenode ) and especially the ir_* functions
+# #
+# # Valentin 'senneth' Batz ( vb@g-23.org ) for the pointer to grep.pl, continuous support
+# # and help in digging up ir_strip_codes
+# #
+# # OnetrixNET technology networks for the debian environment
+# #
+# # Monkey-Pirate.com / Spaceman Spiff for the webspace
+# #
+# }}}
+
+######
+# {{{ M A I N P R O B L E M
+#####
+#
+# It is impossible to place the awl on a statusbar together with other items,
+# because I do not know how to calculate the size that it is going to get
+# granted, and therefore I cannot do the linebreaks properly.
+# This is what is missing to make a nice script out of awl.
+# If you have any ideas, please contact me ASAP :).
+# }}}
+######
+
+######
+# {{{ UTF-8 PROBLEM
+#####
+#
+# Please help me find a solution to this:
+# this be your statusbar, it is using up the maximum term size
+# [[1=1]#abc [2=2]#defghi]
+#
+# now consider this example:i
+# "ascii" characters are marked with ., utf-8 characters with *
+# [[1=1]#... [2=2]#...***]
+#
+# you should think that this is how it would be displayed? WRONG!
+# [[1=1]#... [2=2]#...*** ]
+#
+# this is what Irssi does.. I believe my length calculating code to be correct,
+# however, I'd love to be proven wrong (or receive any other fix, too, of
+# course!)
+# }}}
+######
+
+#########
+# {{{ USAGE
+###
+#
+# copy the script to ~/.irssi/scripts/
+#
+# In irssi:
+#
+# /script load awl
+#
+#
+# Hint: to get rid of the old [Act:] display
+# /statusbar window remove act
+#
+# to get it back:
+# /statusbar window add -after lag -priority 10 act
+# }}}
+##########
+# {{{ OPTIONS
+########
+#
+# {{{ /set awl_display_nokey <string>
+# /set awl_display_key <string>
+# /set awl_display_nokey_active <string>
+# /set awl_display_key_active <string>
+# * string : Format String for one window. The following $'s are expanded:
+# $C : Name
+# $N : Number of the Window
+# $Q : meta-Keymap
+# $H : Start highlighting
+# $S : Stop highlighting
+# /+++++++++++++++++++++++++++++++++,
+# | **** I M P O R T A N T : **** |
+# | |
+# | don't forget to use $S if you |
+# | used $H before! |
+# | |
+# '+++++++++++++++++++++++++++++++++/
+# XXX NOTE ON *_active: there is a BUG somewhere in the length
+# XXX calculation. currently it's best to NOT remove $H/$S from those
+# XXX settings if you use it in the non-active settings.
+# }}}
+# {{{ /set awl_separator <string>
+# * string : Charater to use between the channel entries
+# you'll need to escape " " space and "$" like this:
+# "/set awl_separator \ "
+# "/set awl_separator \$"
+# and {}% like this:
+# "/set awl_separator %{"
+# "/set awl_separator %}"
+# "/set awl_separator %%"
+# (reason being, that the separator is used inside a {format })
+# }}}
+# {{{ /set awl_prefer_name <ON|OFF>
+# * this setting decides whether awl will use the active_name (OFF) or the
+# window name as the name/caption in awl_display_*.
+# That way you can rename windows using /window name myownname.
+# }}}
+# {{{ /set awl_hide_data <num>
+# * num : hide the window if its data_level is below num
+# set it to 0 to basically disable this feature,
+# 1 if you don't want windows without activity to be shown
+# 2 to show only those windows with channel text or hilight
+# 3 to show only windows with hilight
+# }}}
+# {{{ /set awl_maxlines <num>
+# * num : number of lines to use for the window list (0 to disable, negative
+# lock)
+# }}}
+# {{{ /set awl_columns <num>
+# * num : number of columns to use in screen mode (0 for unlimited)
+# }}}
+# {{{ /set awl_block <num>
+# * num : width of a column in screen mode (negative values = block display)
+# /+++++++++++++++++++++++++++++++++,
+# | ****** W A R N I N G ! ****** |
+# | |
+# | If your block display looks |
+# | DISTORTED, you need to add the |
+# | following line to your .theme |
+# | file under |
+# | abstracts = { : |
+# | |
+# | sb_act_none = "%n$*"; |
+# | |
+# '+++++++++++++++++++++++++++++++++/
+#.02:08:26. < shi> Irssi::current_theme()->get_format <.. can this be used?
+# }}}
+# {{{ /set awl_sbar_maxlength <ON|OFF>
+# * if you enable the maxlength setting, the block width will be used as a
+# maximum length for the non-block statusbar mode too.
+# }}}
+# {{{ /set awl_height_adjust <num>
+# * num : how many lines to leave empty in screen mode
+# }}}
+# {{{ /set awl_sort <-data_level|-last_line|refnum>
+# * you can change the window sort order with this variable
+# -data_level : sort windows with hilight first
+# -last_line : sort windows in order of activity
+# refnum : sort windows by window number
+# }}}
+# {{{ /set awl_placement <top|bottom>
+# /set awl_position <num>
+# * these settings correspond to /statusbar because awl will create
+# statusbars for you
+# (see /help statusbar to learn more)
+# }}}
+# {{{ /set awl_all_disable <ON|OFF>
+# * if you set awl_all_disable to ON, awl will also remove the
+# last statusbar it created if it is empty.
+# As you might guess, this only makes sense with awl_hide_data > 0 ;)
+# }}}
+# {{{ /set awl_automode <sbar|screen|emulate_lightbar>
+# * this setting defines whether the window list is shown in statusbars or
+# whether the screen hack is used (from nicklist.pl)
+# }}}
+# }}}
+##########
+# {{{ COMMANDS
+########
+# {{{ /awl paste <ON|OFF|TOGGLE>
+# * enables or disables the screen hack windowlist. This is useful when you
+# want to mark & copy text that you want to paste somewhere (hence the
+# name). (ON means AWL disabled!)
+# This is nicely bound to a function key for example.
+# }}}
+# {{{ /awl redraw
+# * redraws the screen hack windowlist. There are many occasions where the
+# screen hack windowlist can get destroyed so you can use this command to
+# fix it.
+# }}}
+# }}}
+###
+# {{{ WISHES
+####
+#
+# if you fiddle with my mess, provide me with your fixes so I can benefit as well
+#
+# Nei =^.^= ( anti@conference.jabber.teamidiot.de )
+# }}}
+
+# }}}
+
+# {{{ modules
+
+#use Class::Classless;
+#use Term::Info;
+
+# }}}
+
+# {{{ global variables
+
+my $replaces = '[=]'; # AARGH!!! (chars that are always surrounded by weird
+ # colour codes by Irssi)
+
+my $actString = []; # statusbar texts
+my $currentLines = 0;
+my $resetNeeded; # layout/screen has changed, redo everything
+my $needRemake; # "normal" changes
+#my $callcount = 0;
+sub GLOB_QUEUE_TIMER () { 100 }
+my $globTime = undef; # timer to limit remake() calls
+
+
+my $SCREEN_MODE;
+my $DISABLE_SCREEN_TEMP;
+my $currentColumns = 0;
+my $screenResizing;
+my ($screenHeight, $screenWidth);
+my $screenansi = bless {
+ NAME => 'Screen::ANSI',
+ PARENTS => [],
+ METHODS => {
+ dcs => sub { "\033P" },
+ st => sub { "\033\\"},
+ }
+}, 'Class::Classless::X';
+#my $terminfo = new Term::Info 'xterm'; # xterm here, make this modular
+# {{{{{{{{{{{{{{{
+my $terminfo = bless { # xterm here, make this modular
+ NAME => 'Term::Info::xterm',
+ PARENTS => [],
+ METHODS => {
+ # civis=\E[?25l,
+ civis => sub { "\033[?25l" },
+ # sc=\E7,
+ sc => sub { "\0337" },
+ # cup=\E[%i%p1%d;%p2%dH,
+ cup => sub { shift;shift; "\033[" . ($_[0] + 1) . ';' . ($_[1] + 1) . 'H' },
+ # el=\E[K,
+ el => sub { "\033[K" },
+ # rc=\E8,
+ rc => sub { "\0338" },
+ # cnorm=\E[?25h,
+ cnorm => sub { "\033[?25h" },
+ # setab=\E[4%p1%dm,
+ setab => sub { shift;shift; "\033[4" . $_[0] . 'm' },
+ # setaf=\E[3%p1%dm,
+ setaf => sub { shift;shift; "\033[3" . $_[0] . 'm' },
+ # bold=\E[1m,
+ bold => sub { "\033[1m" },
+ # blink=\E[5m,
+ blink => sub { "\033[5m" },
+ # rev=\E[7m,
+ rev => sub { "\033[7m" },
+ # op=\E[39;49m,
+ op => sub { "\033[39;49m" },
+ }
+}, 'Class::Classless::X';
+# }}}}}}}}}}}}}}}
+
+
+sub setc () {
+ $IRSSI{'name'}
+}
+sub set ($) {
+ setc . '_' . shift
+}
+
+# }}}
+
+
+# {{{ sbar mode
+
+my %statusbars; # currently active statusbars
+
+# maybe I should just tie the array ?
+sub add_statusbar {
+ for (@_) {
+ # add subs
+ for my $l ($_) { {
+ no strict 'refs'; # :P
+ *{set$l} = sub { awl($l, @_) };
+ }; }
+ Irssi::command('statusbar ' . (set$_) . ' reset');
+ Irssi::command('statusbar ' . (set$_) . ' enable');
+ if (lc Irssi::settings_get_str(set 'placement') eq 'top') {
+ Irssi::command('statusbar ' . (set$_) . ' placement top');
+ }
+ if ((my $x = int Irssi::settings_get_int(set 'position')) != 0) {
+ Irssi::command('statusbar ' . (set$_) . ' position ' . $x);
+ }
+ Irssi::command('statusbar ' . (set$_) . ' add -priority 100 -alignment left barstart');
+ Irssi::command('statusbar ' . (set$_) . ' add ' . (set$_));
+ Irssi::command('statusbar ' . (set$_) . ' add -priority 100 -alignment right barend');
+ Irssi::command('statusbar ' . (set$_) . ' disable');
+ Irssi::statusbar_item_register(set$_, '$0', set$_);
+ $statusbars{$_} = {};
+ }
+}
+
+sub remove_statusbar {
+ for (@_) {
+ Irssi::command('statusbar ' . (set$_) . ' reset');
+ Irssi::statusbar_item_unregister(set$_); # XXX does this actually work ?
+ # DO NOT REMOVE the sub before you have unregistered it :))
+ for my $l ($_) { {
+ no strict 'refs';
+ undef &{set$l};
+ }; }
+ delete $statusbars{$_};
+ }
+}
+
+sub syncLines {
+ my $temp = $currentLines;
+ $currentLines = @$actString;
+ #Irssi::print("current lines: $temp new lines: $currentLines");
+ my $currMaxLines = Irssi::settings_get_int(set 'maxlines');
+ if ($currMaxLines > 0 and @$actString > $currMaxLines) {
+ $currentLines = $currMaxLines;
+ }
+ elsif ($currMaxLines < 0) {
+ $currentLines = abs($currMaxLines);
+ }
+ return if ($temp == $currentLines);
+ if ($currentLines > $temp) {
+ for ($temp .. ($currentLines - 1)) {
+ add_statusbar($_);
+ Irssi::command('statusbar ' . (set$_) . ' enable');
+ }
+ }
+ else {
+ for ($_ = ($temp - 1); $_ >= $currentLines; $_--) {
+ Irssi::command('statusbar ' . (set$_) . ' disable');
+ remove_statusbar($_);
+ }
+ }
+}
+
+# FIXME implement $get_size_only check, and user $item->{min|max-size} ??
+sub awl {
+ my ($line, $item, $get_size_only) = @_;
+
+ if ($needRemake) {
+ $needRemake = undef;
+ remake();
+ }
+
+ my $text = $actString->[$line]; # DO NOT set the actual $actString->[$line] to '' here or
+ $text = '' unless defined $text; # you'll screw up the statusbar counter ($currentLines)
+ $item->default_handler($get_size_only, $text, '', 1);
+}
+
+# remove old statusbars
+my %killBar;
+sub get_old_status {
+ my ($textDest, $cont, $cont_stripped) = @_;
+ if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq ''
+ and !defined($textDest->{'server'})
+ ) {
+ my $name = quotemeta(set '');
+ if ($cont_stripped =~ m/^$name(\d+)\s/) { $killBar{$1} = {}; }
+ Irssi::signal_stop();
+ }
+}
+sub killOldStatus {
+ %killBar = ();
+ Irssi::signal_add_first('print text' => 'get_old_status');
+ Irssi::command('statusbar');
+ Irssi::signal_remove('print text' => 'get_old_status');
+ remove_statusbar(keys %killBar);
+}
+#killOldStatus();
+
+# end sbar mode }}}
+
+
+# {{{ keymaps
+
+my %keymap;
+
+sub get_keymap {
+ my ($textDest, undef, $cont_stripped) = @_;
+ if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq ''
+ and !defined($textDest->{'server'})
+ ) {
+ if ($cont_stripped =~ m/((?:meta-)+)(.)\s+change_window (\d+)/) {
+ my ($level, $key, $window) = ($1, $2, $3);
+ my $numlevel = ($level =~ y/-//) - 1;
+ $keymap{$window} = ('-' x $numlevel) . "$key";
+ }
+ Irssi::signal_stop();
+ }
+}
+
+sub update_keymap {
+ %keymap = ();
+ Irssi::signal_remove('command bind' => 'watch_keymap');
+ Irssi::signal_add_first('print text' => 'get_keymap');
+ Irssi::command('bind'); # stolen from grep
+ Irssi::signal_remove('print text' => 'get_keymap');
+ Irssi::signal_add('command bind' => 'watch_keymap');
+ Irssi::timeout_add_once(100, 'eventChanged', undef);
+}
+
+# watch keymap changes
+sub watch_keymap {
+ Irssi::timeout_add_once(1000, 'update_keymap', undef);
+}
+
+update_keymap();
+
+# end keymaps }}}
+
+# {{{ format handling
+
+# a bad way do do expansions but who cares
+sub expand {
+ my ($string, %format) = @_;
+ my ($exp, $repl);
+ $string =~ s/\$$exp/$repl/g while (($exp, $repl) = each(%format));
+ return $string;
+}
+
+my %strip_table = (
+ # fe-common::core::formats.c:format_expand_styles
+ # delete format_backs format_fores bold_fores other stuff
+ (map { $_ => '' } (split //, '04261537' . 'kbgcrmyw' . 'KBGCRMYW' . 'U9_8:|FnN>#[')),
+ # escape
+ (map { $_ => $_ } (split //, '{}%')),
+);
+sub ir_strip_codes { # strip %codes
+ my $o = shift;
+ $o =~ s/(%(.))/exists $strip_table{$2} ? $strip_table{$2} : $1/gex;
+ $o
+}
+
+sub ir_parse_special {
+ my $o; my $i = shift;
+ #if ($_[0]) { # for the future?!?
+ # eval {
+ # $o = $_[0]->parse_special($i);
+ # };
+ # unless ($@) {
+ # return $o;
+ # }
+ #}
+ my $win = shift || Irssi::active_win();
+ my $server = Irssi::active_server();
+ if (ref $win and ref $win->{'active'}) {
+ $o = $win->{'active'}->parse_special($i);
+ }
+ elsif (ref $win and ref $win->{'active_server'}) {
+ $o = $win->{'active_server'}->parse_special($i);
+ }
+ elsif (ref $server) {
+ $o = $server->parse_special($i);
+ }
+ else {
+ $o = Irssi::parse_special($i);
+ }
+ $o
+}
+sub ir_parse_special_protected {
+ my $o; my $i = shift;
+ $i =~ s/
+ ( \\. ) | # skip over escapes (maybe)
+ ( \$[^% $\]+ ) # catch special variables
+ /
+ if ($1) { $1 }
+ elsif ($2) { my $i2 = $2; ir_fe(ir_parse_special($i2, @_)) }
+ else { $& }
+ /gex;
+ $i
+}
+
+
+sub sb_ctfe { # Irssi::current_theme->format_expand wrapper
+ Irssi::current_theme->format_expand(
+ shift,
+ (
+ Irssi::EXPAND_FLAG_IGNORE_REPLACES
+ |
+ ($_[0]?0:Irssi::EXPAND_FLAG_IGNORE_EMPTY)
+ )
+ )
+}
+sub sb_expand { # expand {format }s (and apply parse_special for $vars)
+ ir_parse_special(
+ sb_ctfe(shift)
+ )
+}
+sub sb_strip {
+ ir_strip_codes(
+ sb_expand(shift)
+ ); # does this get us the actual length of that s*ty bar :P ?
+}
+sub sb_length {
+ # unicode cludge, d*mn broken Irssi
+ # screw it, this will fail from broken joining anyway (and cause warnings)
+ my $term_type = 'term_type';
+ if (Irssi::version > 20040819) { # this is probably wrong, but I don't know
+ # when the setting name got changed
+ $term_type = 'term_charset';
+ }
+ #if (lc Irssi::settings_get_str($term_type) eq '8bit'
+ # or Irssi::settings_get_str($term_type) =~ /^iso/i
+ #) {
+ # length(sb_strip(shift))
+ #}
+ #else {
+ my $temp = sb_strip(shift);
+ # try to get the displayed width
+ my $length;
+ eval {
+ require Text::CharWidth;
+ $length = Text::CharWidth::mbswidth($temp);
+ };
+ unless ($@) {
+ return $length;
+ }
+ else {
+ if (lc Irssi::settings_get_str($term_type) eq 'utf-8') {
+ # try to switch on utf8
+ eval {
+ no warnings;
+ require Encode;
+ #$temp = Encode::decode_utf8($temp); # thanks for the hint, but I have my
+ # # reasons for _utf8_on
+ Encode::_utf8_on($temp);
+ };
+ }
+ # there is nothing more I can do
+ length($temp)
+ }
+ #}
+}
+
+# !!! G*DD*MN Irssi is adding an additional layer of backslashitis per { } layer
+# !!! AND I still don't know what I need to escape.
+# !!! and NOONE else seems to know or care either.
+# !!! f*ck open source. I mean it.
+# XXX any Irssi::print debug statement leads to SEGFAULT - why ?
+
+# major parts of the idea by buu (#perl @ freenode)
+# thanks to fxn and Somni for debugging
+# while ($_[0] =~ /(.)/g) {
+# my $c = $1; # XXX sooo... goto kills $1
+# if ($q eq '%') { goto ESC; }
+
+## <freenode:#perl:tybalt89> s/%(.)|(\{)|(\})|(\\|\$)/$1?$1:$2?($level++,$2):$3?($level>$min_level&&$level--,$3):'\\'x(2**$level-1).$4/ge; # untested...
+sub ir_escape {
+ my $min_level = $_[1] || 0; my $level = $min_level;
+ my $o = shift;
+ $o =~ s/
+ ( %. ) | # $1
+ ( \{ ) | # $2
+ ( \} ) | # $3
+ ( \\ ) | # $4
+ ( \$(?=[^\\]) ) | # $5
+ ( \$ ) # $6
+ /
+ if ($1) { $1 } # %. escape
+ elsif ($2) { $level++; $2 } # { nesting start
+ elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end
+ elsif ($4) { '\\'x(2**$level) } # \ needs \\escaping
+ elsif ($5) { '\\'x(2**$level-1) . '$' . '\\'x(2**$level-1) } # and $ needs even more because of "parse_special"
+ else { '\\'x(2**$level-1) . '$' } # $ needs \$ escaping
+ /gex;
+ $o
+}
+#sub ir_escape {
+# my $min_level = $_[1] || 0; my $level = $min_level;
+# my $o = shift;
+# $o =~ s/
+# ( %. ) | # $1
+# ( \{ ) | # $2
+# ( \} ) | # $3
+# ( \\ | \$ ) # $4
+# /
+# if ($1) { $1 } # %. escape
+# elsif ($2) { $level++; $2 } # { nesting start
+# elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end
+# else { '\\'x(2**($level-1)-1) . $4 } # \ or $ needs \\escaping
+# /gex;
+# $o
+#}
+
+sub ir_fe { # try to fix format stuff
+ my $x = shift;
+ # XXX why do I have to use two/four % here instead of one/two ??
+ # answer: you screwed up in ir_escape
+ $x =~ s/([%{}])/%$1/g;
+ #$x =~ s/(\\|\$|[ ])/\\$1/g; # XXX HOW CAN I HANDLE THE SPACES CORRECTLY XXX
+ $x =~ s/(\\|\$)/\\$1/g;
+ #$x =~ s/(\$(?=.))|(\$)/$1?"\\\$\\":"\\\$"/ge; # I think this should be here
+ # # (logic), but it doesn't work
+ # # that way :P
+ #$x =~ s/\\/\\\\/g; # that's right, escape escapes
+ $x
+}
+sub ir_ve { # escapes special vars but leave colours alone
+ my $x = shift;
+ #$x =~ s/([%{}])/%$1/g;
+ $x =~ s/(\\|\$|[ ])/\\$1/g;
+ $x
+}
+
+my %ansi_table;
+{
+ my ($i, $j, $k) = (0, 0, 0);
+ %ansi_table = (
+ # fe-common::core::formats.c:format_expand_styles
+ # do format_backs
+ (map { $_ => $terminfo->setab($i++) } (split //, '01234567' )),
+ # do format_fores
+ (map { $_ => $terminfo->setaf($j++) } (split //, 'krgybmcw' )),
+ # do bold_fores
+ (map { $_ => $terminfo->bold() .
+ $terminfo->setaf($k++) } (split //, 'KRGYBMCW')),
+ # reset
+ #(map { $_ => $terminfo->op() } (split //, 'nN')),
+ (map { $_ => $terminfo->op() } (split //, 'n')),
+ (map { $_ => "\033[0m" } (split //, 'N')), # XXX quick and DIRTY
+ # flash/bright
+ F => $terminfo->blink(),
+ # reverse
+ 8 => $terminfo->rev(),
+ # bold
+ (map { $_ => $terminfo->bold() } (split //, '9_')),
+ # delete other stuff
+ (map { $_ => '' } (split //, ':|>#[')),
+ # escape
+ (map { $_ => $_ } (split //, '{}%')),
+ )
+}