From 0169b8031f4e7ac097422cf8614fd177776108e2 Mon Sep 17 00:00:00 2001 From: Bruno Sutic Date: Mon, 26 May 2014 14:18:59 +0200 Subject: [PATCH] Add readme --- LICENSE.md | 19 +++++ README.md | 106 ++++++++++++++++++++++++++++ screenshots/garbled_log_output.png | Bin 0 -> 20280 bytes screenshots/tmux_ppp_log_output.png | Bin 0 -> 15234 bytes 4 files changed, 125 insertions(+) create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 screenshots/garbled_log_output.png create mode 100644 screenshots/tmux_ppp_log_output.png diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..40f6ddd --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (C) 2014 Bruno Sutic + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..1798e19 --- /dev/null +++ b/README.md @@ -0,0 +1,106 @@ +# Tmux Proper Pipe Pane + +Tmux enables easy command logging with `pipe-pane`, but it has some downsides. + +This plugin improves the vanilla Tmux `pipe-pane` functionality. + +### About + +This plugin brings the following improvements to the Tmux logging +functionality: + +**1. removes ANSI codes from the log** + +This is how the plain `pipe-pane` log output looks like if you're using +terminal with coloring: + +![garbled log output](/screenshots/garbled_log_output.png) + +Garbled characters are called ANSI codes. They enable colors in terminal, but +are just making 'noise' in the textual log output. + +`tmux_ppp` filters ANSI codes out of the log, which makes it nicely readable. +Same log as above when using `tmux_ppp`: + +![tmux_ppp log output](/screenshots/tmux_ppp_log_output.png) + +**2. single key binding toggles logging start/stop** + +[This post on stackexchange](http://unix.stackexchange.com/a/10259) describes +how to setup key-bindings for logging with `pipe-pane`. There are 2 +possiblities: +- you can setup a single key binding that toggles logging, but then you don't + know if the toggle key started or stopped the logging. You just get the + message logging `is toggled`. +- in order to properly setup messages for `Starting` and `Ending` logging, 2 + key bindings have to be used. With so many Tmux key bindings, you might + easily forget which key starts and which one ends logging and that' + inconvenient. + +`tmux_ppp` solves above inconveniences by enabling: +- a single key binding that toggles `pipe-pane` logging +- proper notifications, so it's clear whether the logging was started or + stopped when key was pressed. + +### Installation with [Tmux Plugin Manager](https://github.com/bruno-/tpm) (recommended) + +Add plugin to the list of TPM plugins in `.tmux.conf`: + + set -g @tpm_plugins " \ + bruno-/tpm \ + bruno-/tmux_ppp \ + " + +Hit `prefix + I` to fetch the plugin and source it. + +You should now have `tmux_ppp` binding defined. + +### Manual Installation + +Clone the repo: + + $ git clone https://github.com/bruno-/tmux_ppp ~/clone/path + +Add this line to the bottom of `.tmux.conf`: + + run-shell ~/clone/path/proper_pipe_pane.tmux + +Reload TMUX environment: + + # type this in terminal + $ tmux source-file ~/.tmux.conf + +You should now have `tmux_ppp` binding defined. + +### Installing `ansifilter` (recommended for OSX users) + +[ansifilter](http://www.andre-simon.de/doku/ansifilter/en/ansifilter.php) +is a program specialized for removing (or working with) ANSI codes. + +If you're on OSX, it is recommened to install `ansifilter`: +`$ brew install ansifilter` + +If you're on Linux, `tmux_ppp` removes ANSI codes with `sed` regexes. This +should work fine, but please [open an issue](/issues) if you find any problems. + +### Usage + +This plugin defines `prefix + P` key binding (note, that's uppercase `P`). + +Press `prefix + P` to start logging. Message is show with the path to log file: + + Started logging to /Users/bruno/tmux-ppp-0-1-20140526T141437.log + +To end logging, also press `prefix + P`. You'll get a notification: + + Ended logging to /Users/bruno/tmux-ppp-0-1-20140526T141608.log + +### Credits + +Thanks to Chris Johnsen for providing +[this answer on stackexchange](http://unix.stackexchange.com/a/10259). +`tmux_ppp` is based on insights from that post. + +### License + +[MIT](LICENSE.md) diff --git a/screenshots/garbled_log_output.png b/screenshots/garbled_log_output.png new file mode 100644 index 0000000000000000000000000000000000000000..190d8585237ff9e8e10549edfdba61ab236e45e3 GIT binary patch literal 20280 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 C2mvGj literal 0 HcmV?d00001 diff --git a/screenshots/tmux_ppp_log_output.png b/screenshots/tmux_ppp_log_output.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7a89eed32ec997eb7116a1d9810dcb6ed111e4 GIT binary patch literal 15234 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