# HG changeset patch # User Steve Losh # Date 1460239919 0 # Node ID b69dc77f379c07fe0a419380a93d953869fc61ba # Parent 7d16f9d89280c9ae0096fdbc94410a9b881bfe20 A bunch more crap diff -r 7d16f9d89280 -r b69dc77f379c .hgsub --- a/.hgsub Tue Mar 29 11:29:47 2016 +0000 +++ b/.hgsub Sat Apr 09 22:11:59 2016 +0000 @@ -46,6 +46,7 @@ vim/bundle/strftimedammit = [hg]https://bitbucket.org/sjl/strftimedammit.vim/ vim/bundle/surround = [git]git://github.com/tpope/vim-surround.git vim/bundle/syntastic = [git]git://github.com/scrooloose/syntastic.git +vim/bundle/targets = [git]git://github.com/wellle/targets.git vim/bundle/timl = [git]git://github.com/tpope/timl.git vim/bundle/tslime2 = [git]git://github.com/sjl/tslime2.vim.git vim/bundle/vimtex = [git]git://github.com/lervag/vimtex.git diff -r 7d16f9d89280 -r b69dc77f379c .hgsubstate --- a/.hgsubstate Tue Mar 29 11:29:47 2016 +0000 +++ b/.hgsubstate Sat Apr 09 22:11:59 2016 +0000 @@ -36,7 +36,7 @@ 2af074850fde676743f655775e3e151925751adf vim/bundle/powerline fd70ac2ab74a91fb049cb8e82237c34d88354673 vim/bundle/python-mode eb8baa5428bde10ecc1cb14eed1d6e16f5f24695 vim/bundle/rainbow-parentheses -613eb1c81261adfa5dead315089c432ff6dbbc51 vim/bundle/repeat +7a6675f092842c8f81e71d5345bd7cdbf3759415 vim/bundle/repeat b87b9164084c093e0cbd5bff08dbbe01ea59d412 vim/bundle/scala 1f797fda2c457202cf62d9a082a3fccd4278e3bf vim/bundle/scaladoc 10d6c6b52fcdd12f3ba457126f66fee4ccceec04 vim/bundle/securemodelines @@ -44,8 +44,9 @@ 0377b100382c19295b42018289fe8d42a7d57e80 vim/bundle/sparkup 8e1c1dc358de2132b7fbc1adaf94f528e3238e4d vim/bundle/splice 26fbdd7d1f1aa5600d2ebf39bbdd292c38aac16e vim/bundle/strftimedammit -1a73f607f8f5477d6942df2eb6e7245c4864f4d3 vim/bundle/surround +2d05440ad23f97a7874ebd9b5de3a0e65d25d85c vim/bundle/surround 47c70b3e1e388d8f9cc7c6d9687efc047df843ac vim/bundle/syntastic +f6f2d6618a321f5b0065586a7bc934325fec81ab vim/bundle/targets 01deb947b22201c8a3dfee5ae97b11228bd9cc36 vim/bundle/timl d143308c5f385cce76dba5abf7b8b3737d711a4f vim/bundle/tslime2 5d5c71044880443035e07009497962feacb56b20 vim/bundle/vimtex diff -r 7d16f9d89280 -r b69dc77f379c bin/ccl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/ccl Sat Apr 09 22:11:59 2016 +0000 @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -e + +rlwrap ccl64 "$@" diff -r 7d16f9d89280 -r b69dc77f379c bin/lispindent --- a/bin/lispindent Tue Mar 29 11:29:47 2016 +0000 +++ b/bin/lispindent Sat Apr 09 22:11:59 2016 +0000 @@ -1,13 +1,4 @@ -":";if test -z "$LISP"; then -":"; if test "$USER" = evalwhen; then LISP=ecl -":"; elif test "$(arch 2>/dev/null)" = ppc; then LISP=clozure -":"; else LISP=sbcl -":"; fi; fi -":";if test "$LISP" = clisp; then exec clisp -q $0 -":";elif test "$LISP" = clozure; then exec ccl -b -Q -l $0 -":";elif test "$LISP" = ecl; then exec ecl -shell $0 -":";elif test "$LISP" = sbcl; then exec sbcl --script $0 -":";fi +#!/usr/local/bin/sbcl --script ;Dorai Sitaram ;Oct 8, 1999 @@ -17,6 +8,15 @@ ;stdin and produces an indented version thereof on its ;stdout +(defun safe-read (stream) + (let ((*read-eval* nil)) + (read stream nil))) + +(defun safe-read-from-string (string) + (let ((*read-eval* nil)) + (read-from-string string))) + + (defvar *lisp-keywords* '()) (defun define-with-lisp-indent-number (n syms) @@ -53,12 +53,16 @@ multiple-value-bind with-slots)) -(with-open-file (i (merge-pathnames ".lispwords" (user-homedir-pathname)) - :if-does-not-exist nil) - (when i - (loop - (let ((w (or (read i nil) (return)))) - (define-with-lisp-indent-number (car w) (cdr w)))))) +(defparameter *config-files* + (list (merge-pathnames ".lispwords" (user-homedir-pathname)) + ".lispwords" )) + +(dolist (path *config-files*) + (with-open-file (i path :if-does-not-exist nil) + (when i + (loop + (let ((w (or (safe-read i) (return)))) + (define-with-lisp-indent-number (car w) (cdr w))))))) (defun past-next-token (s i n) (let ((escapep nil)) @@ -92,7 +96,7 @@ (let ((colon-pos (position #\: s))) (if colon-pos (if (= colon-pos 0) t nil) - (let ((s (read-from-string s))) + (let ((s (safe-read-from-string s))) (or (characterp s) (numberp s) (stringp s)))))) ;(trace lisp-indent-number literal-token-p read-from-string past-next-token) diff -r 7d16f9d89280 -r b69dc77f379c bin/quicklisp-update --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/quicklisp-update Sat Apr 09 22:11:59 2016 +0000 @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sbcl --eval '(ql:update-client)' --eval '(ql:update-all-dists)' --eval '(quit)' diff -r 7d16f9d89280 -r b69dc77f379c lispwords --- a/lispwords Tue Mar 29 11:29:47 2016 +0000 +++ b/lispwords Sat Apr 09 22:11:59 2016 +0000 @@ -1,8 +1,29 @@ -(1 match *let if test) +; unfuck normal shit +(1 if) +(-1 loop) + +; fiveam +(1 test) + +; optima +(1 match) + +; defstar (2 defun*) -(1 with-db) +; alexandria / utils (1 switch eswitch cswitch) +(1 while until) +(1 with-gensyms) + +; arrows +(1 -> ->> -<> -<>>) -(-1 loop) +; sketch +(1 with-pen) +(3 defsketch) +(1 scancode-case) +; my shit +(1 vector-push-extend-all) + diff -r 7d16f9d89280 -r b69dc77f379c vim/bundle/ooze/plugin/ooze.vim --- a/vim/bundle/ooze/plugin/ooze.vim Tue Mar 29 11:29:47 2016 +0000 +++ b/vim/bundle/ooze/plugin/ooze.vim Sat Apr 09 22:11:59 2016 +0000 @@ -1,29 +1,29 @@ -" vim: set foldmethod=indent " TODO: -" Unfuck folding +" fix showmode awfulness " Disassembly mapping " in-package horseshit " error handling " multi-packet messages " +if !exists("g:ooze_connection") + let g:ooze_connection = 0 +endif -function! s:IsString(a) +function! s:IsString(a) " {{{ return type(a:a) == 1 -endfunction +endfunction " }}} -function! s:GetString(msg, key, extra) +function! s:GetString(msg, key, extra) " {{{ let val = get(a:msg, a:key) if s:IsString(val) return val . a:extra else return '' endif -endfunction +endfunction " }}} let g:ooze_scratch_buffer_name = '__OozeScratch__' -function! s:OpenOozeScratch(contents) - echom "test" - echom bufname('%') +function! s:OpenOozeScratch(contents) " {{{ if bufname('%') != g:ooze_scratch_buffer_name wincmd s execute "edit " . g:ooze_scratch_buffer_name @@ -40,9 +40,9 @@ normal! ggdG call append(0, a:contents) setlocal readonly -endfunction +endfunction " }}} -function! s:HandleMessage(msg) +function! s:HandleMessage(msg) " {{{ let moutput = s:GetString(a:msg, 'macroexpand-1', "") if moutput != '' call s:OpenOozeScratch(split(moutput, "\n")) @@ -51,7 +51,6 @@ let output = '' let output .= s:GetString(a:msg, 'stdout', "") - let output .= s:GetString(a:msg, 'stdout', "") let output .= s:GetString(a:msg, 'stderr', "") let output .= s:GetString(a:msg, 'value', "") @@ -62,17 +61,19 @@ let output .= s:GetString(a:msg, 'function-arglist', "\n\n") let output .= s:GetString(a:msg, 'function-docstring', "\n") if output != '' - echo output + echo substitute(output, '\n\+$', '', '') endif -endfunction +endfunction " }}} -function! s:HandleData(data) +function! s:HandleData(data) " {{{ for msg in bencode#BdecodeAll(a:data) call s:HandleMessage(msg) endfor -endfunction +endfunction " }}} -silent! function s:JobHandler(job_id, data, event) +" NeoVim job-handling {{{ + +silent! function s:JobHandler(job_id, data, event) " {{{ if a:event == 'stdout' call s:HandleData(join(a:data, "\n")) elseif a:event == 'stderr' @@ -80,7 +81,7 @@ else 1 endif -endfunction +endfunction " }}} let s:callbacks = { \ 'on_stdout': function('s:JobHandler'), @@ -88,103 +89,136 @@ \ 'on_exit': function('s:JobHandler') \ } -if !exists("g:ooze_connection") - let g:ooze_connection = 0 -endif +" }}} -function! OozeDisconnect() +function! OozeDisconnect() " {{{ if g:ooze_connection call jobstop(g:ooze_connection) let g:ooze_connection = 0 endif -endfunction - -function! OozeConnect() +endfunction " }}} +function! OozeConnect() " {{{ if g:ooze_connection call OozeDisconnect() endif let g:ooze_connection = jobstart(['nc', 'localhost', '8675'], s:callbacks) -endfunction +endfunction " }}} -function! OozeMacroexpand(form) +function! OozeMacroexpand(form) " {{{ if !g:ooze_connection throw "Not connected!" endif let msg = {"op": "macroexpand", "form": a:form} call jobsend(g:ooze_connection, bencode#Bencode(msg)) -endfunction - -function! OozeMacroexpandSelection() +endfunction " }}} +function! OozeMacroexpandSelection() " {{{ let z = @z normal! gv"zy call OozeMacroexpand(@z) let @z = z -endfunction +endfunction " }}} -function! OozeDocument(symbol) +function! OozeDocument(symbol) " {{{ if !g:ooze_connection throw "Not connected!" endif let msg = {"op": "documentation", "symbol": a:symbol} call jobsend(g:ooze_connection, bencode#Bencode(msg)) -endfunction - -function! OozeDocumentSelection() +endfunction " }}} +function! OozeDocumentSelection() " {{{ let z = @z normal! gv"zy call OozeDocument(@z) let @z = z -endfunction +endfunction " }}} +function! OozeDocumentFormHead() " {{{ + let view = winsaveview() + execute "normal v\(sexp_inner_list)o\(sexp_inner_element)" + call OozeDocumentSelection() + call winrestview(view) +endfunction " }}} -function! OozeEval(code) +function! OozeArglist(symbol) " {{{ + if !g:ooze_connection + return + " throw "Not connected!" + endif + let msg = {"op": "arglist", "symbol": a:symbol} + set noshowmode + call jobsend(g:ooze_connection, bencode#Bencode(msg)) +endfunction " }}} +function! OozeArglistSelection() " {{{ + let z = @z + normal! gv"zy + call OozeArglist(@z) + let @z = z +endfunction " }}} +function! OozeArglistFormHead() " {{{ + let view = winsaveview() + execute "normal v\(sexp_inner_list)o\(sexp_inner_element)" + call OozeArglistSelection() + call winrestview(view) +endfunction " }}} + +function! OozeEval(code) " {{{ if !g:ooze_connection throw "Not connected!" endif let msg = {"op": "eval", "code": a:code} call jobsend(g:ooze_connection, bencode#Bencode(msg)) -endfunction - -function! OozeEvalSelection() +endfunction " }}} +function! OozeEvalSelection() " {{{ let z = @z normal! gv"zy call OozeEval(@z) let @z = z -endfunction +endfunction " }}} -function! OozeLoad(path) +function! OozeLoad(path) " {{{ if !g:ooze_connection throw "Not connected!" endif let msg = {"op": "load-file", "path": a:path} call jobsend(g:ooze_connection, bencode#Bencode(msg)) -endfunction - -function! OozeLoadCurrent() +endfunction " }}} +function! OozeLoadCurrent() " {{{ call OozeLoad(expand('%:p')) -endfunction +endfunction " }}} -function! OozeMapKeys() +function! OozeSelectTopLevelForm() " {{{ + execute "normal v\(sexp_outer_top_list)" +endfunction " }}} + +function! OozeMapKeys() " {{{ nnoremap C :call OozeConnect() nnoremap K :call OozeDisconnect() nnoremap E :call OozeEval(input("? ")) vnoremap e :call OozeEvalSelection() - nnoremap e mz:silent normal! l:call PareditFindDefunBck()vab:call OozeEvalSelection()`z + nnoremap e mz:call OozeSelectTopLevelForm():call OozeEvalSelection()`z nnoremap f mzvab:call OozeEvalSelection()`z nnoremap D :call OozeDocument(input("? ")) " nnoremap d mzviw:call OozeDocumentSelection()`z - inoremap mzbviw:call OozeDocumentSelection()`za + inoremap :call OozeDocumentFormHead() + inoremap :call OozeArglistFormHead()a nnoremap M mzviw:call OozeDocumentSelection()`z nnoremap M :call OozeMacroexpand(input("? ")) nnoremap m mzvab:call OozeMacroexpandSelection()`z nnoremap r :call OozeLoadCurrent() -endfunction +endfunction " }}} -augroup ooze_dev +augroup ooze_dev " {{{ au! autocmd BufWritePost ooze.vim source % +augroup END " }}} + +augroup ooze_showmode_save + au! + " We save showmode around insert mode because the arglist command needs + " to disable it. + au InsertEnter * :let g:ooze_save_showmode=&showmode + au InsertLeave * :let &showmode=g:ooze_save_showmode augroup END - diff -r 7d16f9d89280 -r b69dc77f379c vim/ftplugin/lisp/lispfolding.vim --- a/vim/ftplugin/lisp/lispfolding.vim Tue Mar 29 11:29:47 2016 +0000 +++ b/vim/ftplugin/lisp/lispfolding.vim Sat Apr 09 22:11:59 2016 +0000 @@ -22,6 +22,9 @@ endif elseif getline(v:lnum) =~ '^; .*' return "0" + elseif getline(v:lnum) =~ '^(let.*\s' + " let over lambda + return ">1" elseif getline(v:lnum) =~ '^(defun.*\s' return ">1" elseif getline(v:lnum) =~ '^(test.*\s' diff -r 7d16f9d89280 -r b69dc77f379c vim/vimrc --- a/vim/vimrc Tue Mar 29 11:29:47 2016 +0000 +++ b/vim/vimrc Sat Apr 09 22:11:59 2016 +0000 @@ -516,6 +516,15 @@ " }}} +" Window Resizing + +" right/up : bigger +" left/down : smaller +nnoremap :vertical resize +3 +nnoremap :vertical resize -3 +nnoremap :resize +3 +nnoremap :resize -3 + " }}} " Quick editing ----------------------------------------------------------- {{{ @@ -890,7 +899,7 @@ " }}} " Common Lisp {{{ -" (Neo)REPL Functions {{{ +" Helper Functions {{{ function! HighlightLispRepl() "{{{ " set syntax=lisp syn match replPrompt /\v^[-._a-zA-Z]+\>/ @@ -934,6 +943,9 @@ setlocal lispwords+=labels* setlocal lispwords+=lambda* setlocal lispwords+=*let + + " alexandria + setlocal lispwords+=define-constant endfunction "}}} function! SendLispForm() "{{{ let view = winsaveview() @@ -943,20 +955,25 @@ call winrestview(view) endfunction "}}} +function! SelectToplevelLispForm() "{{{ + execute "normal v\(sexp_outer_top_list)" +endfunction "}}} function! SendToplevelLispForm() "{{{ let view = winsaveview() - " If we're on the first char of the form, calling PareditFindDefunBck will - " move us to the previous form, which we don't want. So instead we'll just - " always move a char to the right. - silent! normal! l - - call PareditFindDefunBck() - execute "normal! vab\" + call SelectToplevelLispForm() call NeoReplSendSelection() call winrestview(view) endfunction "}}} +function! IndentToplevelLispForm() "{{{ + let view = winsaveview() + + call SelectToplevelLispForm() + execute "normal! gv=" + + call winrestview(view) +endfunction "}}} function! SendLispBuffer() "{{{ call NeoReplSendRaw('(load "'. expand("%:p") . '")' . "\n") endfunction "}}} @@ -998,6 +1015,8 @@ au FileType lisp silent! call TurnOnLispFolding() + au FileType lisp setlocal iskeyword+=!,?,% + " Paredit mappings au FileType lisp noremap () :call PareditWrap("(", ")") au FileType lisp noremap )( :call PareditSplice() @@ -1011,10 +1030,6 @@ au FileType lisp noremap ]] :call PareditSmartJumpClosing(0) " )) - " Indent top-level form. - au FileType lisp nmap gi mz:silent normal99[(v%='z - " ]) - au FileType lisp setlocal equalprg=lispindentclean " s/it/happening/ @@ -1028,6 +1043,7 @@ au FileType lisp nnoremap o :call OpenLispRepl() au FileType lisp nnoremap s :call SendToplevelLispForm() au FileType lisp nnoremap c :call NeoReplSendRaw("nil\n"):sleep 20m:call NeoReplSendRaw(" ") + au FileType lisp nnoremap gi :call IndentToplevelLispForm() " Navigate trees of sexps with arrows au FileType lisp call s:vim_sexp_mappings() @@ -2538,6 +2554,11 @@ let g:splice_wrap = "nowrap" " }}} +" Targets {{{ + +let g:targets_pairs = '()b {}B []r <>' + +" }}} " tslime {{{ let g:tslime_ensure_trailing_newlines = 1 @@ -2586,143 +2607,6 @@ vnoremap ar a[ " }}} -" Next and Last {{{ -" -" Motion for "next/last object". "Last" here means "previous", not "final". -" Unfortunately the "p" motion was already taken for paragraphs. -" -" Next acts on the next object of the given type, last acts on the previous -" object of the given type. These don't necessarily have to be in the current -" line. -" -" Currently works for (, [, {, and their shortcuts b, r, B. -" -" Next kind of works for ' and " as long as there are no escaped versions of -" them in the string (TODO: fix that). Last is currently broken for quotes -" (TODO: fix that). -" -" Some examples (C marks cursor positions, V means visually selected): -" -" din' -> delete in next single quotes foo = bar('spam') -" C -" foo = bar('') -" C -" -" canb -> change around next parens foo = bar('spam') -" C -" foo = bar -" C -" -" vin" -> select inside next double quotes print "hello ", name -" C -" print "hello ", name -" VVVVVV - -onoremap an :call NextTextObject('a', '/') -xnoremap an :call NextTextObject('a', '/') -onoremap in :call NextTextObject('i', '/') -xnoremap in :call NextTextObject('i', '/') - -onoremap al :call NextTextObject('a', '?') -xnoremap al :call NextTextObject('a', '?') -onoremap il :call NextTextObject('i', '?') -xnoremap il :call NextTextObject('i', '?') - - -function! s:NextTextObject(motion, dir) - let c = nr2char(getchar()) - let d = '' - - if c ==# "b" || c ==# "(" || c ==# ")" - let c = "(" - elseif c ==# "B" || c ==# "{" || c ==# "}" - let c = "{" - elseif c ==# "r" || c ==# "[" || c ==# "]" - let c = "[" - elseif c ==# "'" - let c = "'" - elseif c ==# '"' - let c = '"' - else - return - endif - - " Find the next opening-whatever. - execute "normal! " . a:dir . c . "\" - - if a:motion ==# 'a' - " If we're doing an 'around' method, we just need to select around it - " and we can bail out to Vim. - execute "normal! va" . c - else - " Otherwise we're looking at an 'inside' motion. Unfortunately these - " get tricky when you're dealing with an empty set of delimiters because - " Vim does the wrong thing when you say vi(. - - let open = '' - let close = '' - - if c ==# "(" - let open = "(" - let close = ")" - elseif c ==# "{" - let open = "{" - let close = "}" - elseif c ==# "[" - let open = "\\[" - let close = "\\]" - elseif c ==# "'" - let open = "'" - let close = "'" - elseif c ==# '"' - let open = '"' - let close = '"' - endif - - " We'll start at the current delimiter. - let start_pos = getpos('.') - let start_l = start_pos[1] - let start_c = start_pos[2] - - " Then we'll find it's matching end delimiter. - if c ==# "'" || c ==# '"' - " searchpairpos() doesn't work for quotes, because fuck me. - let end_pos = searchpos(open) - else - let end_pos = searchpairpos(open, '', close) - endif - - let end_l = end_pos[0] - let end_c = end_pos[1] - - call setpos('.', start_pos) - - if start_l == end_l && start_c == (end_c - 1) - " We're in an empty set of delimiters. We'll append an "x" - " character and select that so most Vim commands will do something - " sane. v is gonna be weird, and so is y. Oh well. - execute "normal! ax\\" - execute "normal! vi" . c - elseif start_l == end_l && start_c == (end_c - 2) - " We're on a set of delimiters that contain a single, non-newline - " character. We can just select that and we're done. - execute "normal! vi" . c - else - " Otherwise these delimiters contain something. But we're still not - " sure Vim's gonna work, because if they contain nothing but - " newlines Vim still does the wrong thing. So we'll manually select - " the guts ourselves. - let whichwrap = &whichwrap - set whichwrap+=h,l - - execute "normal! va" . c . "hol" - - let &whichwrap = whichwrap - endif - endif -endfunction - -" }}} " Numbers {{{ " Motion for numbers. Great for CSS. Lets you do things like this: diff -r 7d16f9d89280 -r b69dc77f379c weechat/trigger.conf --- a/weechat/trigger.conf Tue Mar 29 11:29:47 2016 +0000 +++ b/weechat/trigger.conf Sat Apr 09 22:11:59 2016 +0000 @@ -31,6 +31,13 @@ cmd_pass.hook = modifier 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" +dumbass_buffer.command = "" +dumbass_buffer.conditions = "" +dumbass_buffer.enabled = on +dumbass_buffer.hook = modifier +dumbass_buffer.regex = "==^ +/?b (.+)==/b ${re:1}" +dumbass_buffer.return_code = ok idiot_buffer.arguments = "4000|input_text_for_buffer;4000|history_add" idiot_buffer.command = "" idiot_buffer.conditions = "" @@ -38,13 +45,6 @@ idiot_buffer.hook = modifier idiot_buffer.regex = "==^b (.+)==/b ${re:1}" idiot_buffer.return_code = ok -dumbass_buffer.arguments = "4000|input_text_for_buffer;4000|history_add" -dumbass_buffer.command = "" -dumbass_buffer.conditions = "" -dumbass_buffer.enabled = on -dumbass_buffer.hook = modifier -dumbass_buffer.regex = "==^ +/?b (.+)==/b ${re:1}" -dumbass_buffer.return_code = ok msg_auth.arguments = "5000|irc_message_auth" msg_auth.command = "" msg_auth.conditions = "" diff -r 7d16f9d89280 -r b69dc77f379c weechat/weechat.conf --- a/weechat/weechat.conf Tue Mar 29 11:29:47 2016 +0000 +++ b/weechat/weechat.conf Sat Apr 09 22:11:59 2016 +0000 @@ -36,7 +36,7 @@ day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --" eat_newline_glitch = off highlight = "sjl,slosh,slj,clojerks,horrifying,remotes" -highlight_regex = "(^all[,:]|backend(ia)?[^s/]|red[- ]tape|steve ?losh|rob ford|(jesus )?fucking christ|bring me my [A-Za-z0-9_]+ (pant|breeche|kilt|skirt|short|jort|plort)s?|(horse|mouse|clown)fuckers?|([[:<:]]((mother)?fuck([ie]ng?|er)?|(god?)?damn(ed)?|dammit|(bull|horse)?shite?)[[:>:]].*){3,}|actual footage|pork ?belly)" +highlight_regex = "(red[- ]tape|steve ?losh|rob ford|(jesus )?fucking christ|bring me my [A-Za-z0-9_]+ (pant|breeche|kilt|skirt|short|jort|plort)s?|(horse|mouse|clown)fuckers?|([[:<:]]((mother)?fuck([ie]ng?|er)?|(god?)?damn(ed)?|dammit|(bull|horse)?shite?)[[:>:]].*){3,}|actual footage|pork ?belly)" highlight_tags = "" hotlist_add_buffer_if_away = on hotlist_buffer_separator = ", "