22b5581eba39

Merge.
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Sun, 08 Oct 2017 15:31:38 -0400
parents 15bd14518a98 (current diff) 816a02d790f8 (diff)
children 11ac6a11cf19
branches/tags (none)
files .hgsubstate ffignore fish/config.fish vim/vimrc weechat/perl/autoload/buffers.pl weechat/plugins.conf

Changes

--- a/.hgsub	Sun Oct 08 15:31:00 2017 -0400
+++ b/.hgsub	Sun Oct 08 15:31:38 2017 -0400
@@ -5,7 +5,7 @@
 vim/bundle/clam                  = [hg]https://bitbucket.org/sjl/clam.vim/
 vim/bundle/clojure-static        = [git]git://github.com/guns/vim-clojure-static.git
 vim/bundle/commentary            = [git]git://github.com/tpope/vim-commentary.git
-vim/bundle/ctrlp                 = [git]git://github.com/kien/ctrlp.vim.git
+vim/bundle/ctrlp                 = [git]git://github.com/ctrlpvim/ctrlp.vim.git
 vim/bundle/delimitmate           = [git]git://github.com/Raimondi/delimitMate.git
 vim/bundle/dispatch              = [git]git://github.com/tpope/vim-dispatch.git
 vim/bundle/fireplace             = [git]git://github.com/tpope/vim-fireplace.git
@@ -26,6 +26,8 @@
 vim/bundle/python-mode           = [git]git://github.com/klen/python-mode.git
 vim/bundle/rainbow-parentheses   = [git]git://github.com/kien/rainbow_parentheses.vim.git
 vim/bundle/repeat                = [git]git://github.com/tpope/vim-repeat.git
+vim/bundle/rhubarb               = [git]git://github.com/tpope/vim-rhubarb.git
+vim/bundle/scala                 = [git]git://github.com/derekwyatt/vim-scala
 vim/bundle/securemodelines       = [git]git://github.com/ciaranm/securemodelines.git
 vim/bundle/sexp                  = [git]git://github.com/guns/vim-sexp.git
 vim/bundle/shaderhighlight       = [git]git://github.com/vim-scripts/ShaderHighLight.git
@@ -34,7 +36,7 @@
 vim/bundle/surround              = [git]git://github.com/tpope/vim-surround.git
 vim/bundle/swig                  = [git]git://github.com/vim-scripts/SWIG-syntax.git
 vim/bundle/syntastic             = [git]git://github.com/scrooloose/syntastic.git
-vim/bundle/targets               = [git]git://github.com/wellle/targets.git
+vim/bundle/targets               = [git]git://github.com/wellle/targets.vim.git
 vim/bundle/vimtex                = [git]git://github.com/lervag/vimtex.git
 vim/bundle/vitality              = [hg]https://bitbucket.org/sjl/vitality.vim
 vim/bundle/vlime                 = [git]git://github.com/l04m33/vlime.git
--- a/.hgsubstate	Sun Oct 08 15:31:00 2017 -0400
+++ b/.hgsubstate	Sun Oct 08 15:31:38 2017 -0400
@@ -1,7 +1,7 @@
 5334581e231a5167d03689ff47b3a6fdf082011c mercurial/hg-prompt
 1fc4a9fbead7e0acc4c828b346f3be2658ec3df9 mercurial/templates
 a16a9b63eb85cc0960a7f25c54647ac1f99f3360 vim/bundle/ack
-451b8111344a3a8117996f4e32b6a255b629f87b vim/bundle/badwolf
+5e4a535e2d239cba3db19b6b79abedbc7c541727 vim/bundle/badwolf
 a4d79fc208764917cb58e2aed6fbaeb5e3356d33 vim/bundle/clam
 f1c53e290b16885c2eb3fc96e57d9984b627f735 vim/bundle/clojure-static
 be79030b3e8c0ee3c5f45b4333919e4830531e80 vim/bundle/commentary
@@ -9,7 +9,7 @@
 38487bbec8ba50834e257940b357de03991fa8f9 vim/bundle/delimitmate
 6dd4480388e4727dfe5c723484c500e03b429c28 vim/bundle/dispatch
 1c75b56ceb96a6e7fb6708ae96ab63b3023bab2f vim/bundle/fireplace
-935a2cccd3065b1322fb2235285d42728600afdf vim/bundle/fugitive
+8f60d1d459362771cb68c0097565efdf52e62ec3 vim/bundle/fugitive
 127d706f2def96876605e6bd5d366c973cb8e406 vim/bundle/gdl
 6ea4e1983b18cf440c8f800a3e94b57338a3e99f vim/bundle/glsl
 0d57b080f9fae8573c688b6679b31eb1666edc4c vim/bundle/gnuplot
@@ -26,6 +26,8 @@
 fd70ac2ab74a91fb049cb8e82237c34d88354673 vim/bundle/python-mode
 eb8baa5428bde10ecc1cb14eed1d6e16f5f24695 vim/bundle/rainbow-parentheses
 7a6675f092842c8f81e71d5345bd7cdbf3759415 vim/bundle/repeat
+6caad2b61afcc1b7c476b0ae3dea9ee5f2b1d14a vim/bundle/rhubarb
+e7640f26e56f0be344d60a6098e05d6928fd396d vim/bundle/scala
 10d6c6b52fcdd12f3ba457126f66fee4ccceec04 vim/bundle/securemodelines
 b4398689f7483b01684044ab6b55bf369744c9b3 vim/bundle/sexp
 e02c3e218c51c1e2ea1821a3fe412d4e09ca1502 vim/bundle/shaderhighlight
@@ -33,7 +35,7 @@
 26fbdd7d1f1aa5600d2ebf39bbdd292c38aac16e vim/bundle/strftimedammit
 2d05440ad23f97a7874ebd9b5de3a0e65d25d85c vim/bundle/surround
 19c3d966440b6cfe8d74251881a48e961ddb8648 vim/bundle/swig
-cc6b92afa640db4342dc9ab9fd4215316888d6fa vim/bundle/syntastic
+cd871da6b4515e393ec0ba885423594447980e09 vim/bundle/syntastic
 f6f2d6618a321f5b0065586a7bc934325fec81ab vim/bundle/targets
 5d5c71044880443035e07009497962feacb56b20 vim/bundle/vimtex
 bf3fd7f67e730f93765bd3c1cfcdb18fd4043521 vim/bundle/vitality
--- a/ffignore	Sun Oct 08 15:31:00 2017 -0400
+++ b/ffignore	Sun Oct 08 15:31:38 2017 -0400
@@ -3,6 +3,7 @@
 cookbook
 banner.txt
 UnityTempFile
+.m2
 
 syntax:regex
 \btags$
--- a/fish/config.fish	Sun Oct 08 15:31:00 2017 -0400
+++ b/fish/config.fish	Sun Oct 08 15:31:38 2017 -0400
@@ -65,6 +65,7 @@
     end
 end
 set -gx PATH "/sbin"
+prepend_to_path "/usr/local/opt/postgresql@9.6/bin"
 prepend_to_path "/usr/sbin"
 prepend_to_path "/bin"
 prepend_to_path "/usr/bin"
@@ -93,7 +94,7 @@
 
 set -g -x DRIP_SHUTDOWN 30
 
-set -g -x MAVEN_OPTS "-Xmx512M -XX:MaxPermSize=512M"
+set -g -x MAVEN_OPTS "-Xmx2048m -Xss2M -XX:ReservedCodeCacheSize=128m"
 set -g -x _JAVA_OPTIONS "-Djava.awt.headless=true"
 
 set -g -x GPG_TTY (tty)
@@ -136,7 +137,7 @@
 set PYTHONPATH "$HOME/lib/hg/hg:$PYTHONPATH"
 
 set -gx WORKON_HOME "$HOME/lib/virtualenvs"
-eval (python -m virtualfish)
+eval (python2 -m virtualfish)
 
 set -g -x NLTK_DATA "/Users/sjl/src/ru/malv/nltk_data"
 
--- a/gitignore	Sun Oct 08 15:31:00 2017 -0400
+++ b/gitignore	Sun Oct 08 15:31:38 2017 -0400
@@ -7,3 +7,5 @@
 .idea
 *.iml
 .DS_Store
+.cache-main
+.cache-tests
--- a/hgrc	Sun Oct 08 15:31:00 2017 -0400
+++ b/hgrc	Sun Oct 08 15:31:38 2017 -0400
@@ -34,18 +34,8 @@
 [schemes]
 webf = ssh://sjl@sjl.webfactional.com/repos/
 bbs = ssh://hg@bitbucket.org/
-bbss = ssh://hg@bitbucket.org/sjl/
-bbsd = ssh://hg@bitbucket.org/dwaiter/
 gh = git://github.com/
 ghs = git+ssh://git@github.com/
-cb = ssh://hg@codebasehq.com/
-cbdw = ssh://hg@codebasehq.com/dwaiter/
-cbsl = ssh://hg@codebasehq.com/stevelosh/
-dwd = ssh://hg@bitbucket.org/dwaiter/
-nyh = ssh://sjl@gotham.nyhacker.org/
-dl = ssh://hg@hg.dwaiter.com:38038/
-mirr = ssh://hg@dwaiter.com:38038/mirror/
-gc = https://code.google.com/p/
 
 [diff]
 git = True
--- a/mutt/muttrc	Sun Oct 08 15:31:00 2017 -0400
+++ b/mutt/muttrc	Sun Oct 08 15:31:38 2017 -0400
@@ -43,6 +43,8 @@
 set send_charset="us-ascii:utf-8:iso-8859-1"
 set use_from             # respect the From: address the editor sends back
 
+set sleep_time=0 # don't take for fucking ever to switch folders
+
 # }}}
 # PGP {{{
 
@@ -80,7 +82,8 @@
 bind index,pager <up>     sidebar-prev
 bind index,pager <right>  sidebar-open
 
-set sidebar_format = "%B %> %N "
+set mail_check_stats
+set sidebar_format = "%B %> %S "
 
 # }}}
 # Status Bar {{{
@@ -151,13 +154,14 @@
 set sendmail_wait = 0 # no please don't silently fail, email is important
 unset record
 
-source ~/Dropbox/Settings/mail-accounts/accounts
+# source ~/Dropbox/Settings/mail-accounts/accounts
 
 # }}}
 # Key Bindings {{{
 
 # Index {{{
 
+bind index g noop
 bind index \#       noop
 bind index R        group-reply
 bind index <tab>    sync-mailbox
@@ -196,6 +200,7 @@
 # Pager {{{
 
 bind pager \# noop
+bind pager g noop
 bind pager k  previous-line
 bind pager j  next-line
 bind pager gg top
@@ -232,5 +237,6 @@
 
 # }}}
 # Local Settings {{{
-    source `FILE=$HOME/.mutt-local; if [ ! -s "$FILE" ]; then FILE=/dev/null;fi;echo "$FILE"`
+    # source `FILE=$HOME/.mutt-local; if [ ! -s "$FILE" ]; then FILE=/dev/null;fi;echo "$FILE"`
+    source ~/.mutt-local
 # }}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scalastyle_config.xml	Sun Oct 08 15:31:38 2017 -0400
@@ -0,0 +1,170 @@
+<scalastyle commentFilter="enabled">
+ <name>Scalastyle standard configuration</name>
+ <check class="org.scalastyle.file.FileTabChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.file.FileLengthChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="maxFileLength"><![CDATA[800]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.file.HeaderMatchesChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="header"><![CDATA[// Copyright (C) 2011-2012 the original author or authors.
+// See the LICENCE.txt file distributed with this work for additional
+// information regarding copyright ownership.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.SpacesAfterPlusChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.file.WhitespaceEndOfLineChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.SpacesBeforePlusChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.file.FileLineLengthChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="maxLineLength"><![CDATA[160]]></parameter>
+   <parameter name="tabSize"><![CDATA[4]]></parameter>
+   <parameter name="ignoreImports"><![CDATA[false]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.ClassNamesChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.ObjectNamesChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.PackageObjectNamesChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.EqualsHashCodeChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.IllegalImportsChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="illegalImports"><![CDATA[sun._,java.awt._]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.ParameterNumberChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="maxParameters"><![CDATA[8]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.MagicNumberChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="ignore"><![CDATA[-1,0,1,2,3]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.ReturnChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.NullChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.NoCloneChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.NoFinalizeChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.CovariantEqualsChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.StructuralTypeChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.file.RegexChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="regex"><![CDATA[println]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.NumberOfTypesChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="maxTypes"><![CDATA[30]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.CyclomaticComplexityChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="maximum"><![CDATA[10]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.UppercaseLChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.SimplifyBooleanExpressionChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.IfBraceChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="singleLineAllowed"><![CDATA[true]]></parameter>
+   <parameter name="doubleLineAllowed"><![CDATA[false]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.MethodLengthChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="maxLength"><![CDATA[50]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.MethodNamesChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*(_=)?$]]></parameter>
+   <parameter name="ignoreRegex"><![CDATA[^$]]></parameter>
+   <parameter name="ignoreOverride"><![CDATA[false]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="maxMethods"><![CDATA[30]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="ignoreOverride"><![CDATA[false]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.file.NewLineAtEofChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.file.NoNewLineAtEofChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.WhileChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.VarFieldChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.VarLocalChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.RedundantIfChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.TokenChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="regex"><![CDATA[println]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.DeprecatedJavaChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.EmptyClassChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.ClassTypeParameterChecker" level="warning" enabled="true">
+  <parameters>
+   <parameter name="regex"><![CDATA[^[A-Z_]$]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.UnderscoreImportChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.LowercasePatternMatchChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.MultipleStringLiteralsChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="allowed"><![CDATA[2]]></parameter>
+   <parameter name="ignoreRegex"><![CDATA[^""$]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.ImportGroupingChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.NotImplementedErrorUsage" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.BlockImportChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.ProcedureDeclarationChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.ForBraceChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.SpaceAfterCommentStartChecker" level="warning" enabled="true"></check>
+ <check class="org.scalastyle.scalariform.ScalaDocChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.DisallowSpaceAfterTokenChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.scalariform.NonASCIICharacterChecker" level="warning" enabled="false"></check>
+ <check class="org.scalastyle.file.IndentationChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="tabSize"><![CDATA[2]]></parameter>
+  </parameters>
+ </check>
+ <check class="org.scalastyle.scalariform.FieldNamesChecker" level="warning" enabled="false">
+  <parameters>
+   <parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter>
+  </parameters>
+ </check>
+</scalastyle>
--- a/tmux/tmux.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/tmux/tmux.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -8,7 +8,7 @@
 set -sg repeat-time 600
 
 # Shut up.
-set -g quiet on
+#set -g quiet on
 
 # Focus
 set -g focus-events
@@ -114,11 +114,13 @@
 unbind [
 unbind p
 bind p paste-buffer
-bind -t vi-copy H start-of-line
-bind -t vi-copy L end-of-line
-bind -t vi-copy v begin-selection
-bind -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
-bind -t vi-copy Escape cancel
+
+bind -T copy-mode-vi 'v' send -X begin-selection
+bind -T copy-mode-vi 'y' send -X copy-pipe-and-cancel pbcopy
+bind -T copy-mode-vi Escape send -X cancel
+bind -T copy-mode-vi V send -X rectangle-toggle
+bind -T copy-mode-vi H send-keys -X start-of-line
+bind -T copy-mode-vi L send-keys -X end-of-line
 bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
 
 # Toggle synchronized panes for the current window
--- a/vim/vimrc	Sun Oct 08 15:31:00 2017 -0400
+++ b/vim/vimrc	Sun Oct 08 15:31:38 2017 -0400
@@ -541,7 +541,7 @@
 nnoremap <leader>ep :!vim ~/.plan/README.markdown && hg -R ~/.plan ci -m 'Update'<cr>
 nnoremap <leader>eq :vsplit ~/Dropbox/quotes.txt<cr>Gzz
 nnoremap <leader>et :vsplit ~/.tmux.conf<cr>
-nnoremap <leader>ev :vsplit $MYVIMRC<cr>
+nnoremap <leader>ev :vsplit ~/.vimrc<cr>
 
 " }}}
 " Status Line ------------------------------------------------------------- {{{
@@ -1802,6 +1802,18 @@
 augroup END
 
 " }}}
+" Scala {{{
+
+augroup ft_scala
+    au!
+
+    au FileType scala setlocal foldmethod=marker
+    au FileType scala setlocal foldmarker={,}
+    au FileType scala setlocal cc=100 tw=100
+    au FileType scala setlocal expandtab
+augroup END
+
+" }}}
 " Scheme {{{
 
 function! OpenSchemeRepl() "{{{
@@ -2344,6 +2356,12 @@
 let g:rbpt_max = 1
 
 " }}}
+" Scala {{{
+
+let g:scala_use_builtin_tagbar_defs = 0
+let g:scala_use_default_keymappings = 0
+
+" }}}
 " Scratch {{{
 
 command! ScratchToggle call ScratchToggle()
@@ -2531,19 +2549,71 @@
 let g:syntastic_check_on_open = 0
 let g:syntastic_check_on_wq = 0
 let g:syntastic_auto_jump = 0
-let g:syntastic_java_checker = 'javac'
 let g:syntastic_mode_map = {
             \ "mode": "active",
             \ "active_filetypes": [],
-            \ "passive_filetypes": ['java', 'html', 'rst']
+            \ "passive_filetypes": ['java', 'html', 'rst', 'scala']
             \ }
 let g:syntastic_stl_format = '[%E{%e Errors}%B{, }%W{%w Warnings}]'
+
+nnoremap <leader>C :SyntasticCheck<cr>
+
+" Java
+let g:syntastic_java_checker = 'javac'
+
+" Javascript
 let g:syntastic_jsl_conf = '$HOME/.vim/jsl.conf'
-let g:syntastic_scala_checkers = ['fsc']
+
+" Python
 let g:syntastic_python_checkers = ['python']
 let g:syntastic_python_python_exec = '/Users/sjl/bin/py3'
 
-nnoremap <leader>C :SyntasticCheck<cr>
+" Scala
+let g:syntastic_scala_checkers = ['scalac', 'scalastyle']
+let g:syntastic_scala_checkers = ['fsc']
+let g:syntastic_scala_scalastyle_jar = '/usr/local/Cellar/scalastyle/0.8.0/libexec/scalastyle_2.11-0.8.0-batch.jar'
+let g:syntastic_scala_scalastyle_config_file = '~/lib/dotfiles/scalastyle_config.xml'
+
+if has('autocmd')
+  function! FindClasspath(where)
+    let cpf = findfile('.classpath', escape(a:where, ' ') . ';')
+    let sep = syntastic#util#isRunningWindows() || has('win32unix') ? ';' : ':'
+    try
+      return cpf !=# '' ? [ '-classpath', join(readfile(cpf), sep) ] : []
+    catch
+      return []
+    endtry
+  endfunction
+
+  let g:syntastic_scala_scalac_args = [
+    \ '-Xfatal-warnings:false',
+    \ '-Xfuture',
+    \ '-Xlint',
+    \ '-Ywarn-adapted-args',
+    \ '-Ywarn-dead-code', 
+    \ '-Ywarn-inaccessible',
+    \ '-Ywarn-infer-any',
+    \ '-Ywarn-nullary-override',
+    \ '-Ywarn-nullary-unit',
+    \ '-Ywarn-numeric-widen',
+    \ '-Ywarn-unused-import',
+    \ '-Ywarn-value-discard',
+    \ '-deprecation',
+    \ '-encoding', 'UTF-8',
+    \ '-feature',
+    \ '-language:existentials',
+    \ '-language:higherKinds', 
+    \ '-language:implicitConversions',
+    \ '-unchecked',
+    \ '-d', ($TMPDIR !=# '' ? $TMPDIR : '/tmp') ]
+
+  augroup syntastic_scalac
+    autocmd!
+    autocmd FileType scala let b:syntastic_scala_scalac_args =
+      \ get(g:, 'syntastic_scala_scalac_args', []) +
+      \ FindClasspath(expand('<afile>:p:h', 1))
+  augroup END
+endif
 
 " }}}
 " Splice {{{
@@ -2939,12 +3009,20 @@
 " searches line-by-line.
 
 nnoremap <silent> <leader>A :set opfunc=<SID>AckMotion<CR>g@
-" xnoremap <silent> <leader>A :<C-U>call <SID>AckMotion(visualmode())<CR>
-
-nnoremap <leader>A :Ack! '\b<c-r><c-w>\b'<cr>
-nnoremap <bs> :Ack! '\b<c-r><c-w>\b'<cr>
 xnoremap <silent> <bs> :<C-U>call <SID>AckMotion(visualmode())<CR>
 
+" nnoremap <leader>A :Ack! '\b<c-r><c-w>\b'<cr>
+" nnoremap <bs> :Ack! '\b<c-r><c-w>\b'<cr>
+
+" With C-R C-W, according to the help: "With CTRL-W the part of the word that
+" was already typed is not inserted again."  Because we're using \b to ack for
+" word boundaries, the command string looks like `:Ack! '\b` at this point, and
+" so if the word we're on happens to start with a lowercase b (e.g. "bonkers")
+" it will be skipped, and we'll end up with `:Ack! '\bonkers` and find nothing.
+" It took me a good long time to notice this one.  Computers are total fucking
+" garbage.
+nnoremap <bs> viw:<C-U>call <SID>AckMotion(visualmode())<CR>
+
 function! s:CopyMotionForType(type)
     if a:type ==# 'v'
         silent execute "normal! `<" . a:type . "`>y"
@@ -3143,5 +3221,7 @@
     set encoding=utf-8
 endif
 
+source ~/.vimrc_local
+
 " }}}
 
--- a/weechat/alias.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/alias.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- alias.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [cmd]
 AAWAY = "allserv /away"
--- a/weechat/aspell.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/aspell.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,10 +1,19 @@
 #
 # weechat -- aspell.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [color]
 misspelled = lightred
-suggestions = default
+suggestion = default
+suggestion_delimiter_dict = cyan
+suggestion_delimiter_word = cyan
 
 [check]
 commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic"
@@ -17,4 +26,8 @@
 
 [dict]
 
+[look]
+suggestion_delimiter_dict = " / "
+suggestion_delimiter_word = ","
+
 [option]
--- a/weechat/autosort.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/autosort.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- autosort.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [sorting]
 case_sensitive = off
--- a/weechat/buffers.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/buffers.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- buffers.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [color]
 current_bg = green
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/buflist.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -0,0 +1,38 @@
+#
+# weechat -- buflist.conf
+#
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
+
+[look]
+auto_scroll = 50
+display_conditions = "${buffer.hidden}==0"
+enabled = on
+mouse_jump_visited_buffer = off
+mouse_move_buffer = on
+mouse_wheel = on
+nick_prefix = off
+nick_prefix_empty = on
+signals_refresh = ""
+sort = "number,-active"
+
+[format]
+buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}"
+buffer_current = "${color:,blue}${format_buffer}"
+hotlist = " ${color:green}(${hotlist}${color:green})"
+hotlist_highlight = "${color:magenta}"
+hotlist_low = "${color:white}"
+hotlist_message = "${color:green}"
+hotlist_none = "${color:default}"
+hotlist_private = "${color:magenta}"
+hotlist_separator = "${color:default},"
+indent = "  "
+lag = " ${color:green}[${color:brown}${lag}${color:green}]"
+name = "${name}"
+nick_prefix = "${color_nick_prefix}${nick_prefix}"
+number = "${color:green}${number}${if:${number_displayed}?.: }"
--- a/weechat/charset.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/charset.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- charset.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [default]
 decode = "iso-8859-1"
--- a/weechat/exec.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/exec.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- exec.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [command]
 default_options = ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/fifo.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -0,0 +1,14 @@
+#
+# weechat -- fifo.conf
+#
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
+
+[file]
+enabled = on
+path = "%h/weechat_fifo"
--- a/weechat/logger.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/logger.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- logger.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [look]
 backlog = 20
--- a/weechat/perl/autoload/buffers.pl	Sun Oct 08 15:31:00 2017 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1369 +0,0 @@
-#
-# Copyright (C) 2008-2014 Sebastien Helleu <flashcode@flashtux.org>
-# Copyright (C) 2011-2013 Nils G <weechatter@arcor.de>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-#
-# Display sidebar with list of buffers.
-#
-# History:
-#
-# 2014-01-01, Sebastien Helleu <flashcode@flashtux.org>:
-#     v4.5: add option "mouse_move_buffer"
-# 2013-12-11, Sebastien Helleu <flashcode@flashtux.org>:
-#     v4.4: fix buffer number on drag to the end of list when option
-#           weechat.look.buffer_auto_renumber is off
-# 2013-12-10, nils_2@freenode.#weechat:
-#     v4.3: add options "prefix_bufname" and "suffix_bufname (idea by silverd)
-#         : fix hook_timer() for show_lag wasn't disabled
-#         : improved signal handling (less updating of buffers list)
-# 2013-11-07, Sebastien Helleu <flashcode@flashtux.org>:
-#     v4.2: use default filling "columns_vertical" when bar position is top/bottom
-# 2013-10-31, nils_2@freenode.#weechat:
-#     v4.1: add option "detach_buffer_immediately" (idea by farn)
-# 2013-10-20, nils_2@freenode.#weechat:
-#     v4.0: add options "detach_displayed_buffers", "detach_display_window_number"
-# 2013-09-27, nils_2@freenode.#weechat:
-#     v3.9: add option "toggle_bar" and option "show_prefix_query" (idea by IvarB)
-#         : fix problem with linefeed at end of list of buffers (reported by grawity)
-# 2012-10-18, nils_2@freenode.#weechat:
-#     v3.8: add option "mark_inactive", to mark buffers you are not in (idea by xrdodrx)
-#         : add wildcard "*" for immune_detach_buffers (idea by StarWeaver)
-#         : add new options "detach_query" and "detach_free_content" (idea by StarWeaver)
-# 2012-10-06, Nei <anti.teamidiot.de>:
-#     v3.7: call menu on right mouse if menu script is loaded.
-# 2012-10-06, nils_2 <weechatter@arcor.de>:
-#     v3.6: add new option "hotlist_counter" (idea by torque).
-# 2012-06-02, nils_2 <weechatter@arcor.de>:
-#     v3.5: add values "server|channel|private|all|keepserver|none" to option "hide_merged_buffers" (suggested by dominikh).
-# 2012-05-25, nils_2 <weechatter@arcor.de>:
-#     v3.4: add new option "show_lag".
-# 2012-04-07, Sebastien Helleu <flashcode@flashtux.org>:
-#     v3.3: fix truncation of wide chars in buffer name (option name_size_max) (bug #36034)
-# 2012-03-15, nils_2 <weechatter@arcor.de>:
-#     v3.2: add new option "detach"(weechat >= 0.3.8)
-#           add new option "immune_detach_buffers" (requested by Mkaysi)
-#           add new function buffers_whitelist add|del|reset (suggested by FiXato)
-#           add new function buffers_detach add|del|reset
-# 2012-03-09, Sebastien Helleu <flashcode@flashtux.org>:
-#     v3.1: fix reload of config file
-# 2012-01-29, nils_2 <weechatter@arcor.de>:
-#     v3.0: fix: buffers did not update directly during window_switch (reported by FiXato)
-# 2012-01-29, nils_2 <weechatter@arcor.de>:
-#     v2.9: add options "name_size_max" and "name_crop_suffix"
-# 2012-01-08, nils_2 <weechatter@arcor.de>:
-#     v2.8: fix indenting for option "show_number off"
-#           fix unset of buffer activity in hotlist when buffer was moved with mouse
-#           add buffer with free content and core buffer sorted first (suggested  by nyuszika7h)
-#           add options queries_default_fg/bg and queries_message_fg/bg (suggested by FiXato)
-#           add clicking with left button on current buffer will do a jump_previously_visited_buffer (suggested by FiXato)
-#           add clicking with right button on current buffer will do a jump_next_visited_buffer
-#           add additional informations in help texts
-#           add default_fg and default_bg for whitelist channels
-#           internal changes  (script is now 3Kb smaller)
-# 2012-01-04, Sebastien Helleu <flashcode@flashtux.org>:
-#     v2.7: fix regex lookup in whitelist buffers list
-# 2011-12-04, nils_2 <weechatter@arcor.de>:
-#     v2.6: add own config file (buffers.conf)
-#           add new behavior for indenting (under_name)
-#           add new option to set different color for server buffers and buffers with free content
-# 2011-10-30, nils_2 <weechatter@arcor.de>:
-#     v2.5: add new options "show_number_char" and "color_number_char",
-#           add help-description for options
-# 2011-08-24, Sebastien Helleu <flashcode@flashtux.org>:
-#     v2.4: add mouse support
-# 2011-06-06, nils_2 <weechatter@arcor.de>:
-#     v2.3: added: missed option "color_whitelist_default"
-# 2011-03-23, Sebastien Helleu <flashcode@flashtux.org>:
-#     v2.2: fix color of nick prefix with WeeChat >= 0.3.5
-# 2011-02-13, nils_2 <weechatter@arcor.de>:
-#     v2.1: add options "color_whitelist_*"
-# 2010-10-05, Sebastien Helleu <flashcode@flashtux.org>:
-#     v2.0: add options "sort" and "show_number"
-# 2010-04-12, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.9: replace call to log() by length() to align buffer numbers
-# 2010-04-02, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.8: fix bug with background color and option indenting_number
-# 2010-04-02, Helios <helios@efemes.de>:
-#     v1.7: add indenting_number option
-# 2010-02-25, m4v <lambdae2@gmail.com>:
-#     v1.6: add option to hide empty prefixes
-# 2010-02-12, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.5: add optional nick prefix for buffers like IRC channels
-# 2009-09-30, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.4: remove spaces for indenting when bar position is top/bottom
-# 2009-06-14, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.3: add option "hide_merged_buffers"
-# 2009-06-14, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.2: improve display with merged buffers
-# 2009-05-02, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.1: sync with last API changes
-# 2009-02-21, Sebastien Helleu <flashcode@flashtux.org>:
-#     v1.0: remove timer used to update bar item first time (not needed any more)
-# 2009-02-17, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.9: fix bug with indenting of private buffers
-# 2009-01-04, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.8: update syntax for command /set (comments)
-# 2008-10-20, Jiri Golembiovsky <golemj@gmail.com>:
-#     v0.7: add indenting option
-# 2008-10-01, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.6: add default color for buffers, and color for current active buffer
-# 2008-09-18, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.5: fix color for "low" level entry in hotlist
-# 2008-09-18, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.4: rename option "show_category" to "short_names",
-#           remove option "color_slash"
-# 2008-09-15, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.3: fix bug with priority in hotlist (var not defined)
-# 2008-09-02, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.2: add color for buffers with activity and config options for
-#           colors, add config option to display/hide categories
-# 2008-03-15, Sebastien Helleu <flashcode@flashtux.org>:
-#     v0.1: script creation
-#
-# Help about settings:
-#   display all settings for script (or use iset.pl script to change settings):
-#      /set buffers*
-#   show help text for option buffers.look.whitelist_buffers:
-#      /help buffers.look.whitelist_buffers
-#
-# Mouse-support (standard key bindings):
-#   left mouse-button:
-#       - click on a buffer to switch to selected buffer
-#       - click on current buffer will do action jump_previously_visited_buffer
-#       - drag a buffer and drop it on another position will move the buffer to position
-#   right mouse-button:
-#       - click on current buffer will do action jump_next_visited_buffer
-#       - moving buffer to the left/right will close buffer.
-#
-
-use strict;
-use Encode qw( decode encode );
-# -------------------------------[ internal ]-------------------------------------
-my $SCRIPT_NAME = "buffers";
-my $SCRIPT_VERSION = "4.5";
-
-my $BUFFERS_CONFIG_FILE_NAME = "buffers";
-my $buffers_config_file;
-my $cmd_buffers_whitelist= "buffers_whitelist";
-my $cmd_buffers_detach   = "buffers_detach";
-
-my %mouse_keys          = ("\@item(buffers):button1*"    => "hsignal:buffers_mouse",     # catch all left mouse button gestures
-                           "\@item(buffers):button2*"     => "hsignal:buffers_mouse");    # catch all right mouse button gestures
-my %options;
-my %hotlist_level       = (0 => "low", 1 => "message", 2 => "private", 3 => "highlight");
-my @whitelist_buffers   = ();
-my @immune_detach_buffers= ();
-my @detach_buffer_immediately= ();
-my @buffers_focus       = ();
-my %buffers_timer       = ();
-my %Hooks               = ();
-
-# --------------------------------[ init ]--------------------------------------
-weechat::register($SCRIPT_NAME, "Sebastien Helleu <flashcode\@flashtux.org>", $SCRIPT_VERSION,
-                  "GPL3", "Sidebar with list of buffers", "shutdown_cb", "");
-my $weechat_version = weechat::info_get("version_number", "") || 0;
-
-buffers_config_init();
-buffers_config_read();
-
-weechat::bar_item_new($SCRIPT_NAME, "build_buffers", "");
-weechat::bar_new($SCRIPT_NAME, "0", "0", "root", "", "left", "columns_vertical",
-                 "vertical", "0", "0", "default", "default", "default", "1",
-                 $SCRIPT_NAME);
-
-if ( check_bar_item() == 0 )
-{
-    weechat::command("","/bar show " . $SCRIPT_NAME) if ( weechat::config_boolean($options{"toggle_bar"}) eq 1 );
-}
-
-weechat::hook_signal("buffer_opened", "buffers_signal_buffer", "");
-weechat::hook_signal("buffer_closed", "buffers_signal_buffer", "");
-weechat::hook_signal("buffer_merged", "buffers_signal_buffer", "");
-weechat::hook_signal("buffer_unmerged", "buffers_signal_buffer", "");
-weechat::hook_signal("buffer_moved", "buffers_signal_buffer", "");
-weechat::hook_signal("buffer_renamed", "buffers_signal_buffer", "");
-weechat::hook_signal("buffer_switch", "buffers_signal_buffer", "");
-
-weechat::hook_signal("window_switch", "buffers_signal_buffer", "");
-weechat::hook_signal("hotlist_changed", "buffers_signal_hotlist", "");
-#weechat::hook_command_run("/input switch_active_*", "buffers_signal_buffer", "");
-weechat::bar_item_update($SCRIPT_NAME);
-
-
-if ($weechat_version >= 0x00030600)
-{
-    weechat::hook_focus($SCRIPT_NAME, "buffers_focus_buffers", "");
-    weechat::hook_hsignal("buffers_mouse", "buffers_hsignal_mouse", "");
-    weechat::key_bind("mouse", \%mouse_keys);
-}
-
-weechat::hook_command(  $cmd_buffers_whitelist,
-                        "add/del current buffer to/from buffers whitelist",
-                        "[add] || [del] || [reset]",
-
-                        "  add: add current buffer in configuration file\n".
-                        "  del: delete current buffer from configuration file\n".
-                        "reset: reset all buffers from configuration file (no confirmation!)\n\n".
-                        "Examples:\n".
-                        "/$cmd_buffers_whitelist add\n",
-                        "add %-||".
-                        "del %-||".
-                        "reset %-",
-                        "buffers_cmd_whitelist", "");
-weechat::hook_command(  $cmd_buffers_detach,
-                        "add/del current buffer to/from buffers detach",
-                        "[add] || [del] || [reset]",
-
-                        "  add: add current buffer in configuration file\n".
-                        "  del: delete current buffer from configuration file\n".
-                        "reset: reset all buffers from configuration file (no confirmation!)\n\n".
-                        "Examples:\n".
-                        "/$cmd_buffers_detach add\n",
-                        "add %-||".
-                        "del %-||".
-                        "reset %-",
-                        "buffers_cmd_detach", "");
-
-if ($weechat_version >= 0x00030800)
-{
-    weechat::hook_config("buffers.look.detach", "hook_timer_detach", "");
-    $Hooks{timer_detach} = weechat::hook_timer( weechat::config_integer( $options{"detach"}) * 1000, 60, 0, "buffers_signal_hotlist", "") if ( weechat::config_integer( $options{"detach"}) > 0 );
-}
-
-    weechat::hook_config("buffers.look.show_lag", "hook_timer_lag", "");
-
-    $Hooks{timer_lag} = weechat::hook_timer( weechat::config_integer(weechat::config_get("irc.network.lag_refresh_interval")) * 1000, 0, 0, "buffers_signal_hotlist", "") if ( weechat::config_boolean($options{"show_lag"}) );
-
-# -------------------------------- [ command ] --------------------------------
-sub buffers_cmd_whitelist
-{
-my ( $data, $buffer, $args ) = @_;
-    $args = lc($args);
-    my $buffers_whitelist = weechat::config_string( weechat::config_get("buffers.look.whitelist_buffers") );
-    return weechat::WEECHAT_RC_OK if ( $buffers_whitelist eq "" and $args eq "del" or $buffers_whitelist eq "" and $args eq "reset" );
-    my @buffers_list = split( /,/, $buffers_whitelist );
-    # get buffers name
-    my $infolist = weechat::infolist_get("buffer", weechat::current_buffer(), "");
-    weechat::infolist_next($infolist);
-    my $buffers_name = weechat::infolist_string($infolist, "name");
-    weechat::infolist_free($infolist);
-    return weechat::WEECHAT_RC_OK if ( $buffers_name eq "" );                   # should never happen
-
-    if ( $args eq "add" )
-    {
-        return weechat::WEECHAT_RC_OK if ( grep /^$buffers_name$/, @buffers_list );     # check if buffer already in list
-        push @buffers_list,( $buffers_name );
-        my $buffers_list = &create_whitelist(\@buffers_list);
-        weechat::config_option_set( weechat::config_get("buffers.look.whitelist_buffers"), $buffers_list,1 );
-        weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" added to buffers whitelist");
-    }
-    elsif ( $args eq "del" )
-    {
-        return weechat::WEECHAT_RC_OK unless ( grep /^$buffers_name$/, @buffers_list );     # check if buffer is in list
-        @buffers_list = grep {$_ ne $buffers_name} @buffers_list;                           # delete entry
-        my $buffers_list = &create_whitelist(\@buffers_list);
-        weechat::config_option_set( weechat::config_get("buffers.look.whitelist_buffers"), $buffers_list,1 );
-        weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" deleted from buffers whitelist");
-    }
-    elsif ( $args eq "reset" )
-    {
-        return weechat::WEECHAT_RC_OK if ( $buffers_whitelist eq "" );
-        weechat::config_option_set( weechat::config_get("buffers.look.whitelist_buffers"), "",1 );
-        weechat::print(weechat::current_buffer(), "buffers whitelist is empty, now...");
-    }
-    return weechat::WEECHAT_RC_OK;
-}
-sub buffers_cmd_detach
-{
-    my ( $data, $buffer, $args ) = @_;
-    $args = lc($args);
-    my $immune_detach_buffers = weechat::config_string( weechat::config_get("buffers.look.immune_detach_buffers") );
-    return weechat::WEECHAT_RC_OK if ( $immune_detach_buffers eq "" and $args eq "del" or $immune_detach_buffers eq "" and $args eq "reset" );
-
-    my @buffers_list = split( /,/, $immune_detach_buffers );
-    # get buffers name
-    my $infolist = weechat::infolist_get("buffer", weechat::current_buffer(), "");
-    weechat::infolist_next($infolist);
-    my $buffers_name = weechat::infolist_string($infolist, "name");
-    weechat::infolist_free($infolist);
-    return weechat::WEECHAT_RC_OK if ( $buffers_name eq "" );                   # should never happen
-
-    if ( $args eq "add" )
-    {
-        return weechat::WEECHAT_RC_OK if ( grep /^$buffers_name$/, @buffers_list );     # check if buffer already in list
-        push @buffers_list,( $buffers_name );
-        my $buffers_list = &create_whitelist(\@buffers_list);
-        weechat::config_option_set( weechat::config_get("buffers.look.immune_detach_buffers"), $buffers_list,1 );
-        weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" added to immune detach buffers");
-    }
-    elsif ( $args eq "del" )
-    {
-        return weechat::WEECHAT_RC_OK unless ( grep /^$buffers_name$/, @buffers_list );     # check if buffer is in list
-        @buffers_list = grep {$_ ne $buffers_name} @buffers_list;                           # delete entry
-        my $buffers_list = &create_whitelist(\@buffers_list);
-        weechat::config_option_set( weechat::config_get("buffers.look.immune_detach_buffers"), $buffers_list,1 );
-        weechat::print(weechat::current_buffer(), "buffer \"$buffers_name\" deleted from immune detach buffers");
-    }
-    elsif ( $args eq "reset" )
-    {
-        return weechat::WEECHAT_RC_OK if ( $immune_detach_buffers eq "" );
-        weechat::config_option_set( weechat::config_get("buffers.look.immune_detach_buffers"), "",1 );
-        weechat::print(weechat::current_buffer(), "immune detach buffers is empty, now...");
-    }
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub create_whitelist
-{
-    my @buffers_list = @{$_[0]};
-    my $buffers_list = "";
-        foreach (@buffers_list)
-        {
-            $buffers_list .= $_ .",";
-        }
-        chop $buffers_list;                                                               # remove last ","
-    return $buffers_list;
-}
-
-# -------------------------------- [ config ] --------------------------------
-sub hook_timer_detach
-{
-    my $detach = $_[2];
-    if ( $detach eq 0 )
-    {
-        weechat::unhook($Hooks{timer_detach}) if $Hooks{timer_detach};
-        $Hooks{timer_detach} = "";
-    }
-    else
-    {
-        weechat::unhook($Hooks{timer_detach}) if $Hooks{timer_detach};
-        $Hooks{timer_detach} = weechat::hook_timer( weechat::config_integer( $options{"detach"}) * 1000, 60, 0, "buffers_signal_hotlist", "");
-    }
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub hook_timer_lag
-{
-    my $lag = $_[2];
-    if ( $lag eq "off" )
-    {
-        weechat::unhook($Hooks{timer_lag}) if $Hooks{timer_lag};
-        $Hooks{timer_lag} = "";
-    }
-    else
-    {
-        weechat::unhook($Hooks{timer_lag}) if $Hooks{timer_lag};
-        $Hooks{timer_lag} = weechat::hook_timer( weechat::config_integer(weechat::config_get("irc.network.lag_refresh_interval")) * 1000, 0, 0, "buffers_signal_hotlist", "");
-    }
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub buffers_config_read
-{
-    return weechat::config_read($buffers_config_file) if ($buffers_config_file ne "");
-}
-sub buffers_config_write
-{
-    return weechat::config_write($buffers_config_file) if ($buffers_config_file ne "");
-}
-sub buffers_config_reload_cb
-{
-    my ($data,$config_file) = ($_[0], $_[1]);
-    return weechat::config_reload($config_file)
-}
-sub buffers_config_init
-{
-    $buffers_config_file = weechat::config_new($BUFFERS_CONFIG_FILE_NAME,"buffers_config_reload_cb","");
-    return if ($buffers_config_file eq "");
-
-my %default_options_color =
-("color_current_fg" => ["current_fg", "color", "foreground color for current buffer", "", 0, 0, "lightcyan", "lightcyan", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_current_bg" => ["current_bg", "color", "background color for current buffer", "", 0, 0, "red", "red", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_default_fg" => ["default_fg", "color", "default foreground color for buffer name", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_default_bg" => ["default_bg", "color", "default background color for buffer name", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_highlight_fg" => ["hotlist_highlight_fg", "color", "change foreground color of buffer name if a highlight messaged received", "", 0, 0, "magenta", "magenta", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_highlight_bg" => ["hotlist_highlight_bg", "color", "change background color of buffer name if a highlight messaged received", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_low_fg" => ["hotlist_low_fg", "color", "change foreground color of buffer name if a low message received", "", 0, 0, "white", "white", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_low_bg" => ["hotlist_low_bg", "color", "change background color of buffer name if a low message received", "", 0, 0,
-        "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_message_fg" => ["hotlist_message_fg", "color", "change foreground color of buffer name if a normal message received", "", 0, 0, "yellow", "yellow", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_message_bg" => ["hotlist_message_bg", "color", "change background color of buffer name if a normal message received", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_private_fg" => ["hotlist_private_fg", "color", "change foreground color of buffer name if a private message received", "", 0, 0, "lightgreen", "lightgreen", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_hotlist_private_bg" => ["hotlist_private_bg", "color", "change background color of buffer name if a private message received", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_number" => ["number", "color", "color for buffer number", "", 0, 0, "lightgreen", "lightgreen", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_number_char" => ["number_char", "color", "color for buffer number char", "", 0, 0, "lightgreen", "lightgreen", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_default_fg" => ["whitelist_default_fg", "color", "default foreground color for whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_default_bg" => ["whitelist_default_bg", "color", "default background color for whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_low_fg" => ["whitelist_low_fg", "color", "low color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_low_bg" => ["whitelist_low_bg", "color", "low color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_message_fg" => ["whitelist_message_fg", "color", "message color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_message_bg" => ["whitelist_message_bg", "color", "message color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_private_fg" => ["whitelist_private_fg", "color", "private color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_private_bg" => ["whitelist_private_bg", "color", "private color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_highlight_fg" => ["whitelist_highlight_fg", "color", "highlight color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_whitelist_highlight_bg" => ["whitelist_highlight_bg", "color", "highlight color of whitelist buffer name", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_none_channel_fg" => ["none_channel_fg", "color", "foreground color for none channel buffer (e.g.: core/server/plugin buffer)", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_none_channel_bg" => ["none_channel_bg", "color", "background color for none channel buffer (e.g.: core/server/plugin buffer)", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "queries_default_fg" => ["queries_default_fg", "color", "foreground color for query buffer without message", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "queries_default_bg" => ["queries_default_bg", "color", "background color for query buffer without message", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "queries_message_fg" => ["queries_message_fg", "color", "foreground color for query buffer with unread message", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "queries_message_bg" => ["queries_message_bg", "color", "background color for query buffer with unread message", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "queries_highlight_fg" => ["queries_highlight_fg", "color", "foreground color for query buffer with unread highlight", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "queries_highlight_bg" => ["queries_highlight_bg", "color", "background color for query buffer with unread highlight", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_prefix_bufname" => ["prefix_bufname", "color", "color for prefix of buffer name", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
- "color_suffix_bufname" => ["suffix_bufname", "color", "color for suffix of buffer name", "", 0, 0, "default", "default", 0, "", "", "buffers_signal_config", "", "", ""],
-);
-
-my %default_options_look =
-(
- "hotlist_counter" => ["hotlist_counter", "boolean", "show number of message for the buffer (this option needs WeeChat >= 0.3.5). The relevant option for notification is \"weechat.look.buffer_notify_default\"", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_lag" => ["show_lag", "boolean", "show lag behind servername. This option is using \"irc.color.item_lag_finished\", \"irc.network.lag_min_show\" and \"irc.network.lag_refresh_interval\"", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "look_whitelist_buffers" => ["whitelist_buffers", "string", "comma separated list of buffers for using a differnt color scheme (for example: freenode.#weechat,freenode.#weechat-fr)", "", 0, 0, "", "", 0, "", "", "buffers_signal_config_whitelist", "", "", ""],
- "hide_merged_buffers" => ["hide_merged_buffers", "integer", "hide merged buffers. The value determines which merged buffers should be hidden, keepserver meaning 'all except server buffers'. Other values correspondent to the buffer type.", "server|channel|private|keepserver|all|none", 0, 0, "none", "none", 0, "", "", "buffers_signal_config", "", "", ""],
- "indenting" => ["indenting", "integer", "use indenting for channel and query buffers. This option only takes effect if bar is left/right positioned", "off|on|under_name", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "indenting_number" => ["indenting_number", "boolean", "use indenting for numbers. This option only takes effect if bar is left/right positioned", "", 0, 0, "on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
- "short_names" => ["short_names", "boolean", "display short names (remove text before first \".\" in buffer name)", "", 0, 0, "on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_number" => ["show_number", "boolean", "display channel number in front of buffername", "", 0, 0, "on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_number_char" => ["number_char", "string", "display a char behind channel number", "", 0, 0, ".", ".", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_prefix_bufname" => ["prefix_bufname", "string", "prefix displayed in front of buffername", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_suffix_bufname" => ["suffix_bufname", "string", "suffix displayed at end of buffername", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_prefix" => ["prefix", "boolean", "displays your prefix for channel in front of buffername", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "show_prefix_empty" => ["prefix_empty", "boolean", "use a placeholder for channels without prefix", "", 0, 0, "on", "on", 0, "", "",  "buffers_signal_config", "", "", ""],
- "show_prefix_query" => ["prefix_for_query", "string", "prefix displayed in front of query buffer", "", 0, 0, "", "", 0, "", "", "buffers_signal_config", "", "", ""],
- "sort" => ["sort", "integer", "sort buffer-list by \"number\" or \"name\"", "number|name", 0, 0, "number", "number", 0, "", "", "buffers_signal_config", "", "", ""],
- "core_to_front" => ["core_to_front", "boolean", "core buffer and buffers with free content will be listed first. Take only effect if buffer sort is by name", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "jump_prev_next_visited_buffer" => ["jump_prev_next_visited_buffer", "boolean", "jump to previously or next visited buffer if you click with left/right mouse button on currently visiting buffer", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "name_size_max" => ["name_size_max", "integer", "maximum size of buffer name. 0 means no limitation", "", 0, 256, 0, 0, 0, "", "", "buffers_signal_config", "", "", ""],
- "name_crop_suffix" => ["name_crop_suffix", "string", "contains an optional char(s) that is appended when buffer name is shortened", "", 0, 0, "+", "+", 0, "", "", "buffers_signal_config", "", "", ""],
- "detach" => ["detach", "integer", "detach channel from buffers list after a specific period of time (in seconds) without action (weechat ≥ 0.3.8 required) (0 means \"off\")", "", 0, 31536000, 0, "number", 0, "", "", "buffers_signal_config", "", "", ""],
- "immune_detach_buffers" => ["immune_detach_buffers", "string", "comma separated list of buffers to NOT automatically detatch. Allows \"*\" wildcard. Ex: \"BitlBee,freenode.*\"", "", 0, 0, "", "", 0, "", "", "buffers_signal_config_immune_detach_buffers", "", "", ""],
- "detach_query" => ["detach_query", "boolean", "query buffer will be detachted", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "detach_buffer_immediately" => ["detach_buffer_immediately", "string", "comma separated list of buffers to detach immediately. A query and highlight message will attach buffer again. Allows \"*\" wildcard. Ex: \"BitlBee,freenode.*\"", "", 0, 0, "", "", 0, "", "", "buffers_signal_config_detach_buffer_immediately", "", "", ""],
- "detach_free_content" => ["detach_free_content", "boolean", "buffers with free content will be detached (Ex: iset, chanmon)", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "detach_displayed_buffers" => ["detach_displayed_buffers", "boolean", "buffers displayed in a (split) window will be detached", "", 0, 0, "on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
- "detach_display_window_number" => ["detach_display_window_number", "boolean", "window number will be add, behind buffer name (this option takes only effect with \"detach_displayed_buffers\" option)", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "mark_inactive" => ["mark_inactive", "boolean", "if option is \"on\", inactive buffers (those you are not in) will have parentesis around them. An inactive buffer will not be detached.", "", 0, 0, "off", "off", 0, "", "", "buffers_signal_config", "", "", ""],
- "toggle_bar" => ["toogle_bar", "boolean", "if option is \"on\", buffers bar will hide/show when script is (un)loaded.", "", 0, 0, "on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
- "mouse_move_buffer" => ["mouse_move_buffer", "boolean", "if option is \"on\", mouse gestures (drag & drop) can move buffers in list.", "", 0, 0, "on", "on", 0, "", "", "buffers_signal_config", "", "", ""],
-);
-    # section "color"
-    my $section_color = weechat::config_new_section($buffers_config_file,"color", 0, 0, "", "", "", "", "", "", "", "", "", "");
-    if ($section_color eq "")
-    {
-        weechat::config_free($buffers_config_file);
-        return;
-    }
-    foreach my $option (keys %default_options_color)
-    {
-        $options{$option} = weechat::config_new_option($buffers_config_file, $section_color,
-        $default_options_color{$option}[0],$default_options_color{$option}[1],$default_options_color{$option}[2],
-        $default_options_color{$option}[3],$default_options_color{$option}[4],$default_options_color{$option}[5],
-        $default_options_color{$option}[6],$default_options_color{$option}[7],$default_options_color{$option}[8],
-        $default_options_color{$option}[9],$default_options_color{$option}[10],$default_options_color{$option}[11],
-        $default_options_color{$option}[12],$default_options_color{$option}[13],$default_options_color{$option}[14]);
-    }
-
-    # section "look"
-    my $section_look = weechat::config_new_section($buffers_config_file,"look", 0, 0, "", "", "", "", "", "", "", "", "", "");
-    if ($section_look eq "")
-    {
-        weechat::config_free($buffers_config_file);
-        return;
-    }
-    foreach my $option (keys %default_options_look)
-    {
-        $options{$option} = weechat::config_new_option($buffers_config_file, $section_look,
-        $default_options_look{$option}[0],$default_options_look{$option}[1],$default_options_look{$option}[2],
-        $default_options_look{$option}[3],$default_options_look{$option}[4],$default_options_look{$option}[5],
-        $default_options_look{$option}[6],$default_options_look{$option}[7],$default_options_look{$option}[8],
-        $default_options_look{$option}[9],$default_options_look{$option}[10],$default_options_look{$option}[11],
-        $default_options_look{$option}[12],$default_options_look{$option}[13],$default_options_look{$option}[14],
-        $default_options_look{$option}[15]);
-    }
-}
-
-sub build_buffers
-{
-    my $str = "";
-
-    # get bar position (left/right/top/bottom)
-    my $position = "left";
-    my $option_position = weechat::config_get("weechat.bar.buffers.position");
-    if ($option_position ne "")
-    {
-        $position = weechat::config_string($option_position);
-    }
-
-    # read hotlist
-    my %hotlist;
-    my $infolist = weechat::infolist_get("hotlist", "", "");
-    while (weechat::infolist_next($infolist))
-    {
-        $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")} =
-            weechat::infolist_integer($infolist, "priority");
-        if ( weechat::config_boolean( $options{"hotlist_counter"} ) eq 1 and $weechat_version >= 0x00030500)
-        {
-            $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_00"} =
-                weechat::infolist_integer($infolist, "count_00");   # low message
-            $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_01"} =
-                weechat::infolist_integer($infolist, "count_01");   # channel message
-            $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_02"} =
-                weechat::infolist_integer($infolist, "count_02");   # private message
-            $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")."_count_03"} =
-                weechat::infolist_integer($infolist, "count_03");   # highlight message
-        }
-    }
-    weechat::infolist_free($infolist);
-
-    # read buffers list
-    @buffers_focus = ();
-    my @buffers;
-    my @current1 = ();
-    my @current2 = ();
-    my $old_number = -1;
-    my $max_number = 0;
-    my $max_number_digits = 0;
-    my $active_seen = 0;
-    $infolist = weechat::infolist_get("buffer", "", "");
-    while (weechat::infolist_next($infolist))
-    {
-        my $buffer;
-        my $number = weechat::infolist_integer($infolist, "number");
-        if ($number ne $old_number)
-        {
-            @buffers = (@buffers, @current2, @current1);
-            @current1 = ();
-            @current2 = ();
-            $active_seen = 0;
-        }
-        if ($number > $max_number)
-        {
-            $max_number = $number;
-        }
-        $old_number = $number;
-        my $active = weechat::infolist_integer($infolist, "active");
-        if ($active)
-        {
-            $active_seen = 1;
-        }
-        $buffer->{"pointer"} = weechat::infolist_pointer($infolist, "pointer");
-        $buffer->{"number"} = $number;
-        $buffer->{"active"} = $active;
-        $buffer->{"current_buffer"} = weechat::infolist_integer($infolist, "current_buffer");
-        $buffer->{"num_displayed"} = weechat::infolist_integer($infolist, "num_displayed");
-        $buffer->{"plugin_name"} = weechat::infolist_string($infolist, "plugin_name");
-        $buffer->{"name"} = weechat::infolist_string($infolist, "name");
-        $buffer->{"short_name"} = weechat::infolist_string($infolist, "short_name");
-        $buffer->{"full_name"} = $buffer->{"plugin_name"}.".".$buffer->{"name"};
-        $buffer->{"type"} = weechat::buffer_get_string($buffer->{"pointer"},"localvar_type");
-#        weechat::print("",$buffer->{"type"});
-
-        # check if buffer is active (or maybe a /part, /kick channel)
-        if ($buffer->{"type"} eq "channel" and weechat::config_boolean( $options{"mark_inactive"} ) eq 1)
-        {
-            my $server = weechat::buffer_get_string($buffer->{"pointer"},"localvar_server");
-            my $channel = weechat::buffer_get_string($buffer->{"pointer"},"localvar_channel");
-            my $infolist_channel = weechat::infolist_get("irc_channel","",$server.",".$channel);
-            if ($infolist_channel)
-            {
-                weechat::infolist_next($infolist_channel);
-                $buffer->{"nicks_count"} = weechat::infolist_integer($infolist_channel,"nicks_count");
-            }else
-            {
-                $buffer->{"nicks_count"} = 0;
-            }
-            weechat::infolist_free($infolist_channel);
-        }
-
-        my $result = check_immune_detached_buffers($buffer->{"name"});          # checking for wildcard 
-
-        next if ( check_detach_buffer_immediately($buffer->{"name"}) eq 1
-                 and $buffer->{"current_buffer"} eq 0
-                 and ( not exists $hotlist{$buffer->{"pointer"}} or $hotlist{$buffer->{"pointer"}} < 2) );          # checking for buffer to immediately detach
-
-        unless ($result)
-        {
-            my $detach_time = weechat::config_integer( $options{"detach"});
-            my $current_time = time();
-            # set timer for buffers with no hotlist action
-            $buffers_timer{$buffer->{"pointer"}} = $current_time
-             if ( not exists $hotlist{$buffer->{"pointer"}}
-             and $buffer->{"type"} eq "channel"
-             and not exists $buffers_timer{$buffer->{"pointer"}}
-             and $detach_time > 0);
-
-            $buffers_timer{$buffer->{"pointer"}} = $current_time
-            if (weechat::config_boolean($options{"detach_query"}) eq 1
-            and not exists $hotlist{$buffer->{"pointer"}}
-            and $buffer->{"type"} eq "private"
-            and not exists $buffers_timer{$buffer->{"pointer"}}
-            and $detach_time > 0);
-
-            $detach_time = 0
-            if (weechat::config_boolean($options{"detach_query"}) eq 0
-            and $buffer->{"type"} eq "private");
-
-            # free content buffer
-            $buffers_timer{$buffer->{"pointer"}} = $current_time
-            if (weechat::config_boolean($options{"detach_free_content"}) eq 1
-            and not exists $hotlist{$buffer->{"pointer"}}
-            and $buffer->{"type"} eq ""
-            and not exists $buffers_timer{$buffer->{"pointer"}}
-            and $detach_time > 0);
-            $detach_time = 0
-            if (weechat::config_boolean($options{"detach_free_content"}) eq 0
-            and $buffer->{"type"} eq "");
-
-            $detach_time = 0 if (weechat::config_boolean($options{"mark_inactive"}) eq 1 and defined $buffer->{"nicks_count"} and $buffer->{"nicks_count"} == 0);
-
-            # check for detach
-            unless ( $buffer->{"current_buffer"} eq 0
-            and not exists $hotlist{$buffer->{"pointer"}}
-#            and $buffer->{"type"} eq "channel"
-            and exists $buffers_timer{$buffer->{"pointer"}}
-            and $detach_time > 0
-            and $weechat_version >= 0x00030800
-            and $current_time - $buffers_timer{$buffer->{"pointer"}} >= $detach_time)
-            {
-                if ($active_seen)
-                {
-                    push(@current2, $buffer);
-                }
-                else
-                {
-                    push(@current1, $buffer);
-                }
-            }
-            elsif ( $buffer->{"current_buffer"} eq 0
-            and not exists $hotlist{$buffer->{"pointer"}}
-#            and $buffer->{"type"} eq "channel"
-            and exists $buffers_timer{$buffer->{"pointer"}}
-            and $detach_time > 0
-            and $weechat_version >= 0x00030800
-            and $current_time - $buffers_timer{$buffer->{"pointer"}} >= $detach_time)
-            {   # check for option detach_displayed_buffers and if buffer is displayed in a split window
-                if ( $buffer->{"num_displayed"} eq 1
-                    and weechat::config_boolean($options{"detach_displayed_buffers"}) eq 0 )
-                {
-                    my $infolist_window = weechat::infolist_get("window","","");
-                    while (weechat::infolist_next($infolist_window))
-                    {
-                        my $buffer_ptr = weechat::infolist_pointer($infolist_window, "buffer");
-                        if ($buffer_ptr eq $buffer->{"pointer"})
-                        {
-                            $buffer->{"window"} = weechat::infolist_integer($infolist_window, "number");
-                        }
-                    }
-                    weechat::infolist_free($infolist_window);
-
-                    push(@current2, $buffer);
-                }
-            }
-        }
-        else    # buffer in "immune_detach_buffers"
-        {
-                if ($active_seen)
-                {
-                    push(@current2, $buffer);
-                }
-                else
-                {
-                    push(@current1, $buffer);
-                }
-        }
-    }   # while end
-
-
-    if ($max_number >= 1)
-    {
-        $max_number_digits = length(int($max_number));
-    }
-    @buffers = (@buffers, @current2, @current1);
-    weechat::infolist_free($infolist);
-
-    # sort buffers by number, name or shortname
-    my %sorted_buffers;
-    if (1)
-    {
-        my $number = 0;
-        for my $buffer (@buffers)
-        {
-            my $key;
-            if (weechat::config_integer( $options{"sort"} ) eq 1) # number = 0; name = 1
-            {
-                my $name = $buffer->{"name"};
-                $name = $buffer->{"short_name"} if (weechat::config_boolean( $options{"short_names"} ) eq 1);
-                if (weechat::config_integer($options{"name_size_max"}) >= 1){
-                    $name = encode("UTF-8", substr(decode("UTF-8", $name), 0, weechat::config_integer($options{"name_size_max"})));
-                }
-                if ( weechat::config_boolean($options{"core_to_front"}) eq 1)
-                {
-                    if ( (weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "channel" ) and ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "private") )
-                    {
-                        my $type = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type");
-                        if ( $type eq "" and $name ne "weechat")
-                        {
-                            $name = " " . $name
-                        }else
-                        {
-                            $name = "  " . $name;
-                        }
-                    }
-                }
-                $key = sprintf("%s%08d", lc($name), $buffer->{"number"});
-            }
-            else
-            {
-                $key = sprintf("%08d", $number);
-            }
-            $sorted_buffers{$key} = $buffer;
-            $number++;
-        }
-    }
-
-    # build string with buffers
-    $old_number = -1;
-    foreach my $key (sort keys %sorted_buffers)
-    {
-        my $buffer = $sorted_buffers{$key};
-
-        if ( weechat::config_string($options{"hide_merged_buffers"}) eq "server" )
-        {
-            # buffer type "server" or merged with core?
-            if ( ($buffer->{"type"} eq "server" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) )
-            {
-                next;
-            }
-        }
-        if ( weechat::config_string($options{"hide_merged_buffers"}) eq "channel" )
-        {
-            # buffer type "channel" or merged with core?
-            if ( ($buffer->{"type"} eq "channel" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) )
-            {
-                next;
-            }
-        }
-        if ( weechat::config_string($options{"hide_merged_buffers"}) eq "private" )
-        {
-            # buffer type "private" or merged with core?
-            if ( ($buffer->{"type"} eq "private" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) )
-            {
-                next;
-            }
-        }
-        if ( weechat::config_string($options{"hide_merged_buffers"}) eq "keepserver" )
-        {
-            if ( ($buffer->{"type"} ne "server" or $buffer->{"plugin_name"} eq "core") && (! $buffer->{"active"}) )
-            {
-                next;
-            }
-        }
-        if ( weechat::config_string($options{"hide_merged_buffers"}) eq "all" )
-        {
-            if ( ! $buffer->{"active"} )
-            {
-                next;
-            }
-        }
-
-        push(@buffers_focus, $buffer);                                          # buffer > buffers_focus, for mouse support
-        my $color = "";
-        my $bg = "";
-
-        $color = weechat::config_color( $options{"color_default_fg"} );
-        $bg = weechat::config_color( $options{"color_default_bg"} );
-
-        if ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") eq "private" )
-        {
-            if ( (weechat::config_color($options{"queries_default_bg"})) ne "default" || (weechat::config_color($options{"queries_default_fg"})) ne "default" )
-            {
-              $bg = weechat::config_color( $options{"queries_default_bg"} );
-              $color = weechat::config_color( $options{"queries_default_fg"} );
-            }
-        }
-        # check for core and buffer with free content
-        if ( (weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "channel" ) and ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") ne "private") )
-        {
-            $color = weechat::config_color( $options{"color_none_channel_fg"} );
-            $bg = weechat::config_color( $options{"color_none_channel_bg"} );
-        }
-        # default whitelist buffer?
-        if (grep {$_ eq $buffer->{"name"}} @whitelist_buffers)
-        {
-                $color = weechat::config_color( $options{"color_whitelist_default_fg"} );
-                $bg = weechat::config_color( $options{"color_whitelist_default_bg"} );
-        }
-
-        $color = "default" if ($color eq "");
-
-        # color for channel and query buffer
-        if (exists $hotlist{$buffer->{"pointer"}})
-        {
-        delete $buffers_timer{$buffer->{"pointer"}};
-            # check if buffer is in whitelist buffer
-            if (grep {$_ eq $buffer->{"name"}} @whitelist_buffers)
-            {
-                $bg = weechat::config_color( $options{"color_whitelist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_bg"} );
-                $color = weechat::config_color( $options{"color_whitelist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_fg"} );
-            }
-            elsif ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") eq "private" )
-            {
-                # queries_default_fg/bg and buffers.color.queries_message_fg/bg
-                if ( (weechat::config_color($options{"queries_highlight_fg"})) ne "default" ||
-                      (weechat::config_color($options{"queries_highlight_bg"})) ne "default" ||
-                       (weechat::config_color($options{"queries_message_fg"})) ne "default" ||
-                        (weechat::config_color($options{"queries_message_bg"})) ne "default" )
-                {
-                  if ( ($hotlist{$buffer->{"pointer"}}) == 2 )
-                  {
-                      $bg = weechat::config_color( $options{"queries_message_bg"} );
-                      $color = weechat::config_color( $options{"queries_message_fg"} );
-                  }
-
-                  elsif ( ($hotlist{$buffer->{"pointer"}}) == 3 )
-                  {
-                      $bg = weechat::config_color( $options{"queries_highlight_bg"} );
-                      $color = weechat::config_color( $options{"queries_highlight_fg"} );
-                  }
-                }else
-                {
-                      $bg = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_bg"} );
-                      $color = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_fg"}  );
-                }
-            }else
-            {
-                      $bg = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_bg"} );
-                      $color = weechat::config_color( $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}."_fg"}  );
-            }
-        }
-
-        if ($buffer->{"current_buffer"})
-        {
-            $color = weechat::config_color( $options{"color_current_fg"} );
-            $bg = weechat::config_color( $options{"color_current_bg"} );
-        }
-        my $color_bg = "";
-        $color_bg = weechat::color(",".$bg) if ($bg ne "");
-
-        # create channel number for output
-        if ( weechat::config_string( $options{"show_prefix_bufname"} ) ne "" )
-        {
-            $str .= $color_bg .
-                    weechat::color( weechat::config_color( $options{"color_prefix_bufname"} ) ).
-                    weechat::config_string( $options{"show_prefix_bufname"} ).
-                    weechat::color("default");
-        }
-
-        if ( weechat::config_boolean( $options{"show_number"} ) eq 1 )   # on
-        {
-            if (( weechat::config_boolean( $options{"indenting_number"} ) eq 1)
-                && (($position eq "left") || ($position eq "right")))
-            {
-                $str .= weechat::color("default").$color_bg
-                    .(" " x ($max_number_digits - length(int($buffer->{"number"}))));
-            }
-            if ($old_number ne $buffer->{"number"})
-            {
-                $str .= weechat::color( weechat::config_color( $options{"color_number"} ) )
-                    .$color_bg
-                    .$buffer->{"number"}
-                    .weechat::color("default")
-                    .$color_bg
-                    .weechat::color( weechat::config_color( $options{"color_number_char"} ) )
-                    .weechat::config_string( $options{"show_number_char"} )
-                    .$color_bg;
-            }
-            else
-            {
-                my $indent = "";
-                $indent = ((" " x length($buffer->{"number"}))." ") if (($position eq "left") || ($position eq "right"));
-                $str .= weechat::color("default")
-                    .$color_bg
-                    .$indent;
-            }
-        }
-
-        if (( weechat::config_integer( $options{"indenting"} ) ne 0 )            # indenting NOT off
-            && (($position eq "left") || ($position eq "right")))
-        {
-            my $type = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type");
-            if (($type eq "channel") || ($type eq "private"))
-            {
-                if ( weechat::config_integer( $options{"indenting"} ) eq 1 )
-                {
-                    $str .= "  ";
-                }
-                elsif ( (weechat::config_integer($options{"indenting"}) eq 2) and (weechat::config_integer($options{"indenting_number"}) eq 0) )        #under_name
-                {
-                    if ( weechat::config_boolean( $options{"show_number"} ) eq 0 )
-                    {
-                      $str .= "  ";
-                    }else
-                    {
-                      $str .= ( (" " x ( $max_number_digits - length($buffer->{"number"}) ))." " );
-                    }
-                }
-            }
-        }
-
-        $str .= weechat::config_string( $options{"show_prefix_query"}) if (weechat::config_string( $options{"show_prefix_query"} ) ne "" and  $buffer->{"type"} eq "private");
-
-        if (weechat::config_boolean( $options{"show_prefix"} ) eq 1)
-        {
-            my $nickname = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_nick");
-            if ($nickname ne "")
-            {
-                # with version >= 0.3.2, this infolist will return only nick
-                # with older versions, whole nicklist is returned for buffer, and this can be very slow
-                my $infolist_nick = weechat::infolist_get("nicklist", $buffer->{"pointer"}, "nick_".$nickname);
-                if ($infolist_nick ne "")
-                {
-                    while (weechat::infolist_next($infolist_nick))
-                    {
-                        if ((weechat::infolist_string($infolist_nick, "type") eq "nick")
-                            && (weechat::infolist_string($infolist_nick, "name") eq $nickname))
-                        {
-                            my $prefix = weechat::infolist_string($infolist_nick, "prefix");
-                            if (($prefix ne " ") or (weechat::config_boolean( $options{"show_prefix_empty"} ) eq 1))
-                            {
-                                # with version >= 0.3.5, it is now a color name (for older versions: option name with color)
-                                if (int($weechat_version) >= 0x00030500)
-                                {
-                                    $str .= weechat::color(weechat::infolist_string($infolist_nick, "prefix_color"));
-                                }
-                                else
-                                {
-                                    $str .= weechat::color(weechat::config_color(
-                                                               weechat::config_get(
-                                                                   weechat::infolist_string($infolist_nick, "prefix_color"))));
-                                }
-                                $str .= $prefix;
-                            }
-                            last;
-                        }
-                    }
-                    weechat::infolist_free($infolist_nick);
-                }
-            }
-        }
-        if ($buffer->{"type"} eq "channel" and weechat::config_boolean( $options{"mark_inactive"} ) eq 1 and $buffer->{"nicks_count"} == 0)
-        {
-            $str .= "(";
-        }
-
-        $str .= weechat::color($color) . weechat::color(",".$bg);
-
-        if (weechat::config_boolean( $options{"short_names"} ) eq 1)
-        {
-            if (weechat::config_integer($options{"name_size_max"}) >= 1)                # check max_size of buffer name
-            {
-                $str .= encode("UTF-8", substr(decode("UTF-8", $buffer->{"short_name"}), 0, weechat::config_integer($options{"name_size_max"})));
-                $str .= weechat::color(weechat::config_color( $options{"color_number_char"})).weechat::config_string($options{"name_crop_suffix"}) if (length($buffer->{"short_name"}) > weechat::config_integer($options{"name_size_max"}));
-                $str .= add_inactive_parentless($buffer->{"type"},$buffer->{"nicks_count"});
-                $str .= add_hotlist_count($buffer->{"pointer"},%hotlist);
-            }
-            else
-            {
-                $str .= $buffer->{"short_name"};
-                $str .= add_inactive_parentless($buffer->{"type"},$buffer->{"nicks_count"});
-                $str .= add_hotlist_count($buffer->{"pointer"},%hotlist);
-            }
-        }
-        else
-        {
-            if (weechat::config_integer($options{"name_size_max"}) >= 1)                # check max_size of buffer name
-            {
-                $str .= encode("UTF-8", substr(decode("UTF-8", $buffer->{"name"},), 0, weechat::config_integer($options{"name_size_max"})));
-                $str .= weechat::color(weechat::config_color( $options{"color_number_char"})).weechat::config_string($options{"name_crop_suffix"}) if (length($buffer->{"name"}) > weechat::config_integer($options{"name_size_max"}));
-                $str .= add_inactive_parentless($buffer->{"type"},$buffer->{"nicks_count"});
-                $str .= add_hotlist_count($buffer->{"pointer"},%hotlist);
-            }
-            else
-            {
-                $str .= $buffer->{"name"};
-                $str .= add_inactive_parentless($buffer->{"type"},$buffer->{"nicks_count"});
-                $str .= add_hotlist_count($buffer->{"pointer"},%hotlist);
-            }
-        }
-        if ( weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type") eq "server" and weechat::config_boolean($options{"show_lag"}) eq 1)
-        {
-            my $color_lag = weechat::config_color(weechat::config_get("irc.color.item_lag_finished"));
-            my $min_lag = weechat::config_integer(weechat::config_get("irc.network.lag_min_show"));
-            my $infolist_server = weechat::infolist_get("irc_server","",$buffer->{"short_name"});
-            weechat::infolist_next($infolist_server);
-            my $lag = (weechat::infolist_integer($infolist_server, "lag"));
-            weechat::infolist_free($infolist_server);
-            if ( int($lag) > int($min_lag) )
-            {
-                $lag = $lag / 1000;
-                $str .= weechat::color("default") . " (" . weechat::color($color_lag) . $lag . weechat::color("default") . ")";
-            }
-        }
-        if (weechat::config_boolean($options{"detach_displayed_buffers"}) eq 0
-            and weechat::config_boolean($options{"detach_display_window_number"}) eq 1)
-        {
-            if ($buffer->{"window"})
-            {
-                $str .= weechat::color("default") . " (" . weechat::color(weechat::config_color( $options{"color_number"})) . $buffer->{"window"} . weechat::color("default") . ")";
-            }
-        }
-        $str .= weechat::color("default");
-
-        if ( weechat::config_string( $options{"show_suffix_bufname"} ) ne "" )
-        {
-            $str .= weechat::color( weechat::config_color( $options{"color_suffix_bufname"} ) ).
-                    weechat::config_string( $options{"show_suffix_bufname"} ).
-                    weechat::color("default");
-        }
-
-        $str .= "\n";
-        $old_number = $buffer->{"number"};
-    }
-
-    # remove spaces and/or linefeed at the end
-    $str =~ s/\s+$//;
-    chomp($str);
-    return $str;
-}
-
-sub add_inactive_parentless
-{
-my ($buf_type, $buf_nicks_count) = @_;
-my $str = "";
-    if ($buf_type eq "channel" and weechat::config_boolean( $options{"mark_inactive"} ) eq 1 and $buf_nicks_count == 0)
-    {
-        $str .= weechat::color(weechat::config_color( $options{"color_number_char"}));
-        $str .= ")";
-    }
-return $str;
-}
-
-sub add_hotlist_count
-{
-my ($bufpointer,%hotlist) = @_;
-
-return "" if ( weechat::config_boolean( $options{"hotlist_counter"} ) eq 0 or ($weechat_version < 0x00030500));   # off
-my $col_number_char = weechat::color(weechat::config_color( $options{"color_number_char"}) );
-my $str = " ".$col_number_char."(";
-
-# 0 = low level
-if (defined $hotlist{$bufpointer."_count_00"})
-{
-    my $bg = weechat::config_color( $options{"color_hotlist_low_bg"} );
-    my $color = weechat::config_color( $options{"color_hotlist_low_fg"} );
-    $str .= weechat::color($bg).
-            weechat::color($color).
-            $hotlist{$bufpointer."_count_00"} if ($hotlist{$bufpointer."_count_00"} ne "0");
-}
-
-# 1 = message
-if (defined $hotlist{$bufpointer."_count_01"})
-{
-    my $bg = weechat::config_color( $options{"color_hotlist_message_bg"} );
-    my $color = weechat::config_color( $options{"color_hotlist_message_fg"} );
-    if ($str =~ /[0-9]$/)
-    {
-        $str .= ",".
-                weechat::color($bg).
-                weechat::color($color).
-                $hotlist{$bufpointer."_count_01"} if ($hotlist{$bufpointer."_count_01"} ne "0");
-    }else
-    {
-        $str .= weechat::color($bg).
-                weechat::color($color).
-                $hotlist{$bufpointer."_count_01"} if ($hotlist{$bufpointer."_count_01"} ne "0");
-    }
-}
-# 2 = private
-if (defined $hotlist{$bufpointer."_count_02"})
-{
-    my $bg = weechat::config_color( $options{"color_hotlist_private_bg"} );
-    my $color = weechat::config_color( $options{"color_hotlist_private_fg"} );
-    if ($str =~ /[0-9]$/)
-    {
-        $str .= ",".
-                weechat::color($bg).
-                weechat::color($color).
-                $hotlist{$bufpointer."_count_02"} if ($hotlist{$bufpointer."_count_02"} ne "0");
-    }else
-    {
-        $str .= weechat::color($bg).
-                weechat::color($color).
-                $hotlist{$bufpointer."_count_02"} if ($hotlist{$bufpointer."_count_02"} ne "0");
-    }
-}
-# 3 = highlight
-if (defined $hotlist{$bufpointer."_count_03"})
-{
-    my $bg = weechat::config_color( $options{"color_hotlist_highlight_bg"} );
-    my $color = weechat::config_color( $options{"color_hotlist_highlight_fg"} );
-    if ($str =~ /[0-9]$/)
-    {
-        $str .= ",".
-                weechat::color($bg).
-                weechat::color($color).
-                $hotlist{$bufpointer."_count_03"} if ($hotlist{$bufpointer."_count_03"} ne "0");
-    }else
-    {
-        $str .= weechat::color($bg).
-                weechat::color($color).
-                $hotlist{$bufpointer."_count_03"} if ($hotlist{$bufpointer."_count_03"} ne "0");
-    }
-}
-$str .= $col_number_char. ")";
-
-$str = "" if (weechat::string_remove_color($str, "") eq " ()");         # remove color and check for buffer with no messages
-return $str;
-}
-
-sub buffers_signal_buffer
-{
-    my ($data, $signal, $signal_data) = @_;
-
-    # check for buffer_switch and set or remove detach time
-    if ($weechat_version >= 0x00030800)
-    {
-        if ($signal eq "buffer_switch")
-        {
-            my $pointer = weechat::hdata_get_list (weechat::hdata_get("buffer"), "gui_buffer_last_displayed"); # get switched buffer
-            my $current_time = time();
-            if ( weechat::buffer_get_string($pointer, "localvar_type") eq "channel")
-            {
-                $buffers_timer{$pointer} = $current_time;
-            }
-            else
-            {
-                delete $buffers_timer{$pointer};
-            }
-        }
-        if ($signal eq "buffer_opened")
-        {
-            my $current_time = time();
-            $buffers_timer{$signal_data} = $current_time;
-        }
-        if ($signal eq "buffer_closing")
-        {
-            delete $buffers_timer{$signal_data};
-        }
-    }
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub buffers_signal_hotlist
-{
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-
-sub buffers_signal_config_whitelist
-{
-    @whitelist_buffers = ();
-    @whitelist_buffers = split( /,/, weechat::config_string( $options{"look_whitelist_buffers"} ) );
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub buffers_signal_config_immune_detach_buffers
-{
-    @immune_detach_buffers = ();
-    @immune_detach_buffers = split( /,/, weechat::config_string( $options{"immune_detach_buffers"} ) );
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub buffers_signal_config_detach_buffer_immediately
-{
-    @detach_buffer_immediately = ();
-    @detach_buffer_immediately = split( /,/, weechat::config_string( $options{"detach_buffer_immediately"} ) );
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-sub buffers_signal_config
-{
-    weechat::bar_item_update($SCRIPT_NAME);
-    return weechat::WEECHAT_RC_OK;
-}
-
-# called when mouse click occured in buffers item: this callback returns buffer
-# hash according to line of item where click occured
-sub buffers_focus_buffers
-{
-    my %info = %{$_[1]};
-    my $item_line = int($info{"_bar_item_line"});
-    undef my $hash;
-    if (($info{"_bar_item_name"} eq $SCRIPT_NAME) && ($item_line >= 0) && ($item_line <= $#buffers_focus))
-    {
-        $hash = $buffers_focus[$item_line];
-    }
-    else
-    {
-        $hash = {};
-        my $hash_focus = $buffers_focus[0];
-        foreach my $key (keys %$hash_focus)
-        {
-            $hash->{$key} = "?";
-        }
-    }
-    return $hash;
-}
-
-# called when a mouse action is done on buffers item, to execute action
-# possible actions: jump to a buffer or move buffer in list (drag & drop of buffer)
-sub buffers_hsignal_mouse
-{
-    my ($data, $signal, %hash) = ($_[0], $_[1], %{$_[2]});
-    my $current_buffer = weechat::buffer_get_integer(weechat::current_buffer(), "number"); # get current buffer number
-
-    if ( $hash{"_key"} eq "button1" )           # left mouse button
-    {
-        if ($hash{"number"} eq $hash{"number2"})
-        {
-            if ( weechat::config_integer($options{"jump_prev_next_visited_buffer"}) eq 1 )
-            {
-                if ( $current_buffer eq $hash{"number"} )
-                {
-                    weechat::command("","/input jump_previously_visited_buffer");
-                }
-                else
-                {
-                    weechat::command("", "/buffer ".$hash{"full_name"});
-                }
-            }
-            else
-            {
-                weechat::command("", "/buffer ".$hash{"full_name"});
-            }
-        }
-        else
-        {
-            move_buffer(%hash) if (weechat::config_boolean($options{"mouse_move_buffer"}));
-        }
-    }
-    elsif ( ($hash{"_key"} eq "button2") && (weechat::config_integer($options{"jump_prev_next_visited_buffer"}) eq 1) )# right mouse button
-    {
-        if ( $current_buffer eq $hash{"number2"} )
-        {
-            weechat::command("","/input jump_next_visited_buffer");
-        }
-    }
-    else
-    {
-        my $infolist = weechat::infolist_get("hook", "", "command,menu");
-        my $has_menu_command = weechat::infolist_next($infolist);
-        weechat::infolist_free($infolist);
-
-        if ( $has_menu_command && $hash{"_key"} =~ /button2/ )
-        {
-            if ($hash{"number"} eq $hash{"number2"})
-            {
-                weechat::command($hash{"pointer"}, "/menu buffer1 $hash{short_name} $hash{number}");
-            }
-            else
-            {
-                weechat::command($hash{"pointer"}, "/menu buffer2 $hash{short_name}/$hash{short_name2} $hash{number} $hash{number2}")
-            }
-        }
-        else
-        {
-            move_buffer(%hash) if (weechat::config_boolean($options{"mouse_move_buffer"}));
-        }
-    }
-}
-
-sub move_buffer
-{
-  my %hash = @_;
-  my $number2 = $hash{"number2"};
-  if ($number2 eq "?")
-  {
-      # if number 2 is not known (end of gesture outside buffers list), then set it
-      # according to mouse gesture
-      $number2 = "1";
-      if (($hash{"_key"} =~ /gesture-right/) || ($hash{"_key"} =~ /gesture-down/))
-      {
-          $number2 = "999999";
-          if ($weechat_version >= 0x00030600)
-          {
-              my $hdata_buffer = weechat::hdata_get("buffer");
-              my $last_gui_buffer = weechat::hdata_get_list($hdata_buffer, "last_gui_buffer");
-              if ($last_gui_buffer)
-              {
-                  $number2 = weechat::hdata_integer($hdata_buffer, $last_gui_buffer, "number") + 1;
-              }
-          }
-      }
-  }
-  my $ptrbuf = weechat::current_buffer();
-  weechat::command($hash{"pointer"}, "/buffer move ".$number2);
-}
-
-sub check_immune_detached_buffers
-{
-    my ($buffername) = @_;
-    foreach ( @immune_detach_buffers ){
-        my $immune_buffer = weechat::string_mask_to_regex($_);
-        if ($buffername =~ /^$immune_buffer$/i)
-        {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-sub check_detach_buffer_immediately
-{
-    my ($buffername) = @_;
-    foreach ( @detach_buffer_immediately ){
-        my $detach_buffer = weechat::string_mask_to_regex($_);
-        if ($buffername =~ /^$detach_buffer$/i)
-        {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-sub shutdown_cb
-{
-    weechat::command("","/bar hide " . $SCRIPT_NAME) if ( weechat::config_boolean($options{"toggle_bar"}) eq 1 );
-    return weechat::WEECHAT_RC_OK
-}
-
-sub check_bar_item
-{
-    my $item = 0;
-    my $infolist = weechat::infolist_get("bar", "", "");
-    while (weechat::infolist_next($infolist))
-    {
-        my $bar_items = weechat::infolist_string($infolist, "items");
-        if (index($bar_items,$SCRIPT_NAME) != -1)
-        {
-            my $name = weechat::infolist_string($infolist, "name");
-            if ($name ne $SCRIPT_NAME)
-            {
-                $item = 1;
-                last;
-            }
-        }
-    }
-    weechat::infolist_free($infolist);
-    return $item;
-}
--- a/weechat/plugins.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/plugins.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,1 +1,89 @@
-/Users/sjl/Dropbox/Settings/plugins.conf
\ No newline at end of file
+#
+# weechat -- plugins.conf
+#
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
+
+[var]
+fifo.fifo = "on"
+lua.check_license = "off"
+perl.buffers.color_current = "black,green"
+perl.buffers.color_default = "default"
+perl.buffers.color_hotlist_highlight = "lightmagenta"
+perl.buffers.color_hotlist_low = "default"
+perl.buffers.color_hotlist_message = "green"
+perl.buffers.color_hotlist_private = "lightgreen"
+perl.buffers.color_number = "green"
+perl.buffers.color_whitelist_buffers = ""
+perl.buffers.color_whitelist_default = ""
+perl.buffers.color_whitelist_highlight = ""
+perl.buffers.color_whitelist_low = ""
+perl.buffers.color_whitelist_message = ""
+perl.buffers.color_whitelist_private = ""
+perl.buffers.hide_merged_buffers = "all"
+perl.buffers.indenting = "on"
+perl.buffers.indenting_number = "on"
+perl.buffers.short_names = "on"
+perl.buffers.show_category = "off"
+perl.buffers.show_number = "on"
+perl.buffers.show_prefix = "off"
+perl.buffers.show_prefix_empty = "on"
+perl.buffers.sort = "number"
+perl.check_license = "on"
+perl.colorize_lines.avail_buffer = "all"
+perl.colorize_lines.blacklist_buffers = ""
+perl.colorize_lines.blacklist_channels = ""
+perl.colorize_lines.buffer_autoset = "off"
+perl.colorize_lines.buffers = "all"
+perl.colorize_lines.chat = "off"
+perl.colorize_lines.highlight = "on"
+perl.colorize_lines.hotlist_max_level_nicks_add = "off"
+perl.colorize_lines.lines = "off"
+perl.colorize_lines.look_highlight = "on"
+perl.colorize_lines.look_highlight_regex = "on"
+perl.colorize_lines.nicks = ""
+perl.colorize_lines.own_lines = "off"
+perl.colorize_lines.shuffle = "off"
+python.check_license = "on"
+python.growl.hostname = ""
+python.growl.icon = "icon.png"
+python.growl.password = ""
+python.growl.show_channel_topic = "on"
+python.growl.show_dcc = "on"
+python.growl.show_highlighted_message = "on"
+python.growl.show_invite_message = "on"
+python.growl.show_notice_message = "off"
+python.growl.show_private_action_message = "on"
+python.growl.show_private_message = "on"
+python.growl.show_public_action_message = "off"
+python.growl.show_public_message = "off"
+python.growl.show_server = "on"
+python.growl.show_upgrade_ended = "on"
+python.growl.sticky = "off"
+python.growl.sticky_away = "on"
+python.notification_center.show_highlights = "on"
+python.notification_center.show_message_text = "on"
+python.notification_center.show_private_message = "on"
+python.notification_center.sound = "off"
+ruby.check_license = "on"
+tcl.check_license = "on"
+
+[desc]
+perl.colorize_lines.avail_buffer = "messages will be colored in buffer (all = all buffers, channel = channel buffers, query = query buffers (default: all "
+perl.colorize_lines.blacklist_buffers = "comma-separated list of channels to be ignored (e.g. freenode.#weechat,*.#python)"
+perl.colorize_lines.blacklist_channels = "comma separated list with channelname. Channels in this list will be ignored. (e.g.: freenode.#weechat,freenode.#weechat-fr)"
+perl.colorize_lines.buffer_autoset = "toggle highlight color in chat area for buffer_autoset (default: off)"
+perl.colorize_lines.buffers = "buffer type affected by the script (all/channel/query, default: all)"
+perl.colorize_lines.chat = "colors text in chat area with according nick color (default: on)"
+perl.colorize_lines.highlight = "highlight messages will be fully highlighted in chat area (on = whole line will be highlighted, off = only nick will be highlighted, always = a highlight will always color the whole message) (default: on)"
+perl.colorize_lines.hotlist_max_level_nicks_add = "toggle highlight for hotlist (default: off)"
+perl.colorize_lines.look_highlight = "toggle highlight color in chat area for option weechat.look.highlight (default: off)"
+perl.colorize_lines.look_highlight_regex = "toggle highlight color in chat area for option weechat.look.highlight_regex (default: off)"
+perl.colorize_lines.nicks = "comma separated list with nicknames. Only messages from nicks in this list will be colorized. (e.g.: freenode.nils_2,freenode.flashcode,freenode.weebot). You can also give a filename with nicks. The filename has to start with "/" (e.g.: /buddylist.txt). The format has to be: one nick each line with <servername>.<nickname>"
+perl.colorize_lines.own_lines = "colors own written messages (default: off)"
+perl.colorize_lines.shuffle = "toggle shuffle color mode for chats area (default: off)"
--- a/weechat/relay.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/relay.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- relay.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [look]
 auto_open_buffer = on
@@ -18,6 +25,7 @@
 text_selected = white
 
 [network]
+allow_empty_password = off
 allowed_ips = ""
 bind_address = ""
 clients_purge_delay = 0
@@ -33,6 +41,7 @@
 backlog_max_minutes = 1440
 backlog_max_number = 256
 backlog_since_last_disconnect = on
+backlog_since_last_message = off
 backlog_tags = "irc_privmsg"
 backlog_time_format = "[%H:%M] "
 
--- a/weechat/script.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/script.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- script.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [look]
 columns = "%s %n %V %v %u | %d | %t"
@@ -43,7 +50,7 @@
 [scripts]
 autoload = on
 cache_expire = 60
+download_timeout = 30
 hold = ""
 path = "%h/script"
 url = "http://www.weechat.org/files/plugins.xml.gz"
-url_force_https = on
--- a/weechat/sec.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/sec.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- sec.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [crypt]
 cipher = aes256
--- a/weechat/trigger.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/trigger.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- trigger.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [look]
 enabled = on
@@ -9,6 +16,7 @@
 [color]
 flag_command = lightgreen
 flag_conditions = yellow
+flag_post_action = lightblue
 flag_regex = lightcyan
 flag_return_code = lightmagenta
 regex = white
@@ -22,6 +30,7 @@
 beep.conditions = "${tg_highlight} || ${tg_msg_pv}"
 beep.enabled = on
 beep.hook = print
+beep.post_action = none
 beep.regex = ""
 beep.return_code = ok
 cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth"
@@ -29,6 +38,7 @@
 cmd_pass.conditions = ""
 cmd_pass.enabled = on
 cmd_pass.hook = modifier
+cmd_pass.post_action = none
 cmd_pass.regex = "==^((/(msg|quote) +nickserv +(id|identify|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==$1$.*+"
 cmd_pass.return_code = ok
 dumbass_buffer.arguments = "4000|input_text_for_buffer;4000|history_add"
@@ -36,6 +46,7 @@
 dumbass_buffer.conditions = ""
 dumbass_buffer.enabled = on
 dumbass_buffer.hook = modifier
+dumbass_buffer.post_action = none
 dumbass_buffer.regex = "==^ +/?b (.+)==/b ${re:1}"
 dumbass_buffer.return_code = ok
 idiot_buffer.arguments = "4000|input_text_for_buffer;4000|history_add"
@@ -43,6 +54,7 @@
 idiot_buffer.conditions = ""
 idiot_buffer.enabled = on
 idiot_buffer.hook = modifier
+idiot_buffer.post_action = none
 idiot_buffer.regex = "==^b (.+)==/b ${re:1}"
 idiot_buffer.return_code = ok
 msg_auth.arguments = "5000|irc_message_auth"
@@ -50,6 +62,7 @@
 msg_auth.conditions = ""
 msg_auth.enabled = on
 msg_auth.hook = modifier
+msg_auth.post_action = none
 msg_auth.regex = "==^(.*(id|identify|register|ghost +[^ ]+|release +[^ ]+) +)(.*)==$1$.*+"
 msg_auth.return_code = ok
 server_pass.arguments = "5000|input_text_display;5000|history_add"
@@ -57,5 +70,14 @@
 server_pass.conditions = ""
 server_pass.enabled = on
 server_pass.hook = modifier
+server_pass.post_action = none
 server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==$1$.*4$5"
 server_pass.return_code = ok
+uncc.arguments = "weechat_print"
+uncc.command = ""
+uncc.conditions = "${tg_tag_nick}"
+uncc.enabled = on
+uncc.hook = modifier
+uncc.post_action = none
+uncc.regex = "== \[cc: [^ ]+\]===="
+uncc.return_code = ok
--- a/weechat/urlgrab.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/urlgrab.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- urlgrab.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [color]
 color_bg_selected = green
--- a/weechat/weechat.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/weechat.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -190,7 +190,9 @@
 [network]
 connection_timeout = 60
 # gnutls_ca_file = "%h/ssl/CAs.pem"
-gnutls_ca_file = "~/.weechat/certs/ca-bundle.crt"
+# gnutls_ca_file = "~/.weechat/certs/ca-bundle.crt"
+# gnutls_ca_file = "/usr/local/etc/openssl/cert.pem"
+gnutls_ca_file = "/Users/sjl/src/sighborg/certs/ssl_ca_bundle.pem"
 gnutls_handshake_timeout = 30
 proxy_curl = ""
 
--- a/weechat/xfer.conf	Sun Oct 08 15:31:00 2017 -0400
+++ b/weechat/xfer.conf	Sun Oct 08 15:31:38 2017 -0400
@@ -1,6 +1,13 @@
 #
 # weechat -- xfer.conf
 #
+# WARNING: It is NOT recommended to edit this file by hand,
+# especially if WeeChat is running.
+#
+# Use /set or similar command to change settings in WeeChat.
+#
+# For more info, see: https://weechat.org/doc/quickstart
+#
 
 [look]
 auto_open_buffer = on