e27888136324

More
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Wed, 03 Jul 2019 12:30:16 -0400
parents 639612e93fe8
children 3a0cb2d4dceb 930ee3b48e3c
branches/tags (none)
files bin/heading bin/pathpb fish/config.fish grcat/conf.tail-vm lisp/batchcolor.lisp lispwords stumpwmrc vim/vimrc

Changes

--- a/bin/heading	Mon Jun 24 16:16:16 2019 -0700
+++ b/bin/heading	Wed Jul 03 12:30:16 2019 -0400
@@ -4,5 +4,5 @@
 shift
 
 echo
-toilet -t -k -F metal:crop -f "$FONT" "$@"
+toilet -t -F gay:crop -f "$FONT" "$@"
 echo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/pathpb	Wed Jul 03 12:30:16 2019 -0400
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+readlink -n -f "$1" | pbcopy
--- a/fish/config.fish	Mon Jun 24 16:16:16 2019 -0700
+++ b/fish/config.fish	Wed Jul 03 12:30:16 2019 -0400
@@ -21,8 +21,6 @@
 alias p pass
 alias pw pass-work
 
-complete -c s -w ssh
-
 # I give up
 alias :q exit
 alias :qa exit
@@ -43,7 +41,9 @@
     )"
 end
 
-make_completion g "git"
+complete -c s -w ssh
+complete -c cw -w which
+complete -c ew -w which
 
 # }}}
 # Bind Keys {{{
@@ -87,6 +87,7 @@
 prepend_to_path "$HOME/src/dotfiles/bin"
 prepend_to_path "$HOME/src/hg"
 prepend_to_path "$HOME/bin"
+prepend_to_path "$HOME/.go/bin"
 
 set BROWSER open
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/grcat/conf.tail-vm	Wed Jul 03 12:30:16 2019 -0400
@@ -0,0 +1,15 @@
+# err
+regexp=(ERR )
+colours=default,red
+=======
+# warn
+regexp=(WARN )
+colours=default,yellow
+=======
+# info
+regexp=(INFO )
+colours=default,cyan
+=======
+# time
+regexp=(^\d\d:\d\d:\d\d)
+colours=bright_black
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/batchcolor.lisp	Wed Jul 03 12:30:16 2019 -0400
@@ -0,0 +1,122 @@
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (ql:quickload '(:adopt :cl-ppcre ) :silent t))
+
+(defpackage :batchcolor
+  (:use :cl)
+  (:export :toplevel :*ui*))
+
+(in-package :batchcolor)
+
+;;;; Configuration ------------------------------------------------------------
+(defparameter *version* "0.0.1")
+(defparameter *colors* (make-hash-table :test #'equal))
+
+
+;;;; Functionality ------------------------------------------------------------
+(defun rgb-code (color)
+  (destructuring-bind (r g b) color
+    ;; The 256 color mode color values are essentially r/g/b in base 6, but
+    ;; shifted 16 higher to account for the intiial 8+8 colors.
+    (+ (* r 36)
+       (* g 6)
+       (* b 1)
+       16)))
+
+(defun random-color ()
+  (loop :for color = (list (random 6) (random 6) (random 6))
+        :while (<= (apply #'+ color) 3)
+        :finally (return color)))
+
+(defun find-color (string)
+  (let ((current (gethash string *colors*)))
+    (if current
+      current
+      (setf (gethash string *colors*) (random-color)))))
+
+(defun ansi-color-start (color)
+  (format nil "~C[38;5;~Dm" #\Escape (rgb-code color)))
+
+(defun ansi-color-end ()
+  (format nil "~C[0m" #\Escape))
+
+(defun colorize-line (scanner line &aux (start 0))
+  (ppcre:do-scans (ms me rs re scanner line)
+    (setf rs (remove nil rs)
+          re (remove nil re))
+    (when (/= 1 (length rs))
+      (error "Regex must contain exactly 1 register group, e.g. 'x (fo+) y'."))
+    (let* ((word-start (aref rs 0))
+           (word-end (aref re 0))
+           (word (subseq line word-start word-end))
+           (color (find-color word)))
+      (write-string line *standard-output* :start start :end word-start)
+      (format t "~A~A~A" (ansi-color-start color) word (ansi-color-end))
+      (setf start word-end)))
+  (write-line line *standard-output* :start start)
+  (values))
+
+
+;;;; Run ----------------------------------------------------------------------
+(defun run (pattern)
+  (loop
+    :with scanner = (ppcre:create-scanner pattern)
+    :for line = (read-line *standard-input* nil)
+    :while line :do (colorize-line scanner line)))
+
+
+;;;; User Interface -----------------------------------------------------------
+(defparameter *examples*
+  '(("Colorize IRC nicknames in a chat log:"
+     . "cat channel.log | batchcolor '<(\\\\w+)>'")
+    ("Colorize UUIDs in a request log:"
+     . "tail -f /var/log/foo | batchcolor '([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})'")))
+
+
+(defparameter *option-help*
+  (adopt:make-option 'help
+    :help "Display help and exit."
+    :long "help"
+    :short #\h
+    :reduce (constantly t)))
+
+(defparameter *option-version*
+  (adopt:make-option 'version
+    :help "Display version information and exit."
+    :long "version"
+    :reduce (constantly t)))
+
+
+(adopt:define-string *help-text*
+  "batchcolor takes a regular expression and matches it against standard ~
+   input one line at a time.  Each unique match is highlighted in a random ~
+   color.")
+
+(defparameter *ui*
+  (adopt:make-interface
+    :name "batchcolor"
+    :usage "[OPTIONS] REGEX"
+    :summary "colorize regex matches in batches"
+    :help *help-text*
+    :examples *examples*
+    :contents (list *option-help*
+                    *option-version*)))
+
+
+(defun toplevel ()
+  #+sbcl (sb-ext:disable-debugger)
+  (handler-case
+      (multiple-value-bind (arguments options) (adopt:parse-options *ui*)
+        (when (gethash 'help options)
+          (adopt:print-help-and-exit *ui*))
+        (when (gethash 'version options)
+          (write-line *version*)
+          (adopt:exit))
+        (if (/= 1 (length arguments))
+          (adopt:print-help-and-exit *ui*)
+          (destructuring-bind (pattern) arguments
+            (run pattern))))
+    (error (c) (adopt:print-error-and-exit c))
+    #+sbcl (sb-sys:interactive-interrupt (c)
+             (declare (ignore c))
+             (adopt:exit))))
+
--- a/lispwords	Mon Jun 24 16:16:16 2019 -0700
+++ b/lispwords	Wed Jul 03 12:30:16 2019 -0400
@@ -111,6 +111,7 @@
 
 ; ppcre
 (2 register-groups-bind do-register-groups)
+(1 do-scans)
 
 ; lparallel
 (1 pdotimes)
--- a/stumpwmrc	Mon Jun 24 16:16:16 2019 -0700
+++ b/stumpwmrc	Wed Jul 03 12:30:16 2019 -0400
@@ -389,7 +389,7 @@
   (run-or-raise "firefox" '(:class "Firefox")))
 
 (defcommand terminal () ()
-  (run-shell-command "st -f 'Ubuntu Mono:size=12'"))
+  (run-shell-command "st -f 'Ubuntu Mono:size=10'"))
 
 
 ;;;; Timers -------------------------------------------------------------------
--- a/vim/vimrc	Mon Jun 24 16:16:16 2019 -0700
+++ b/vim/vimrc	Wed Jul 03 12:30:16 2019 -0400
@@ -271,7 +271,9 @@
 silent! digr // 9585 "U+2571=╱    BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
 silent! digr \\ 9586 "U+2572=╲    BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
 
-silent! digr \|\| 8214 "U+2016=‖    DOUBLE VERTICAL LINE
+silent! digr \|\| 8214 "U+2016=‖  DOUBLE VERTICAL LINE
+
+silent! digr ~~ 8967  "U+2307=⌇   WAVY LINE
 
 " }}}
 " Convenience mappings ---------------------------------------------------- {{{
@@ -2816,7 +2818,7 @@
     autocmd!
 
     " Settings
-    au FileType vlime_sldb setlocal nowrap
+    au FileType vlime_sldb setlocal nowrap foldmethod=indent shiftwidth=8 tabstop=8
     au FileType vlime_repl setlocal nowrap winfixheight
 
     " Keys for Lisp files
@@ -2826,8 +2828,8 @@
     au FileType lisp nnoremap <buffer> <localleader>i :call vlime#plugin#Inspect(vlime#ui#CurExprOrAtom())<cr>
     au FileType lisp nnoremap <buffer> <nowait> <localleader>I :call vlime#plugin#Inspect()<cr>
     au FileType lisp nnoremap <buffer> M :call vlime#plugin#DocumentationSymbol(vlime#ui#CurAtom())<cr>
+    au FileType lisp nnoremap <buffer> gi :call IndentToplevelLispForm()<cr>
     au FileType lisp setlocal indentexpr=vlime#plugin#CalcCurIndent()
-    au FileType lisp nnoremap <buffer> gi :call IndentToplevelLispForm()<cr>
 
     " Keys for the REPL
     au FileType vlime_repl      nnoremap <buffer> i :call vlime#ui#repl#InspectCurREPLPresentation()<cr>