The script `bin/svnwrapper.rb' is a wrapper for the command line tool `svn' that adds highlighting and paging. What has this got to do with Emacs? This package use Emacs (in batch mode) to perform highlighting; with the help of the package `e2ansi' the result is rendered using ANSI-sequences which the terminal can display. This package highlights the output of administrative subcommand like `svn status' and `svn diff'. In addition, it highlights source files viewed using `svn cat'. It supports all programming languages Emacs support, either natively or by using third party packages. Requirements: This package requires `ruby', `emacs', and `svn' to be installed. In addition, it relies in the Emacs package `e2ansi'. Installation: Configuring `e2ansi': First, `e2ansi' must be configured. This is done by setting environment variables recognized by `less', typically in a suitable init file. For example (using bash syntax): export "LESSOPEN=||-/PATH/TO/emacs --batch -Q -l ~/.emacs -l e2ansi-silent -l bin/e2ansi-cat %s" export "LESS=-r -j20" See the documentation of `e2ansi' for more information. Configuring `svnwrapper.rb': Add an alias to be used to run `svnwrapper.rb'. Of course, you can pick `svn'. alias svn="ruby ~/PATH/TO/e2ansi/bin/svnwrapper.rb -E -X ----" In the examples, replace "/PATH/TO" with the real paths. If you have installed this package through the Emacs package manager, the path would look something like `~/.emacs.d/elpa/svnwrapper-20180101.100/bin'. Installing `svnwrapper.el': Install the Emacs module `svnwrapper.el' using the Emacs package system. Adapting you Emacs init file to batch mode: If you (like me) have a huge Emacs init file, you might need to reexamine it, to make sure that it works smoothly in batch mode. * Make sure you don't refer to functions or variables that aren't avaiable in batch mode. (You can use `fboundp' or `boundp' to check if a function or variable is present, respectively.) * Make sure your init file is quiet. (The `e2ansi' package contains the module `e2ansi-silence.el' that can silence output from `message' and `load'.) * Avoid loading things that take a lot of time, that you don't need in batch mode. You can use the Emacs varibale `noninteractive' to conditinally run code. For example: (unless noninteractive (do-something-that-would-be-pointless-in-batch-mode)) Alternatively, you could have a simpler init file when running Emacs in batch mode, say `.my-batch-emacs', and modify the environment variable `LESSOPEN' accordingly. The `svnwrapper.rb' utility: The core of this package is the file `svnwrapper.rb', written in Ruby. svnwrapper [args-to-svnwrapper] [args-to-less ... ----] args-to-svn ... The following options can be specified: * `--forward-slashes' Make 'svn status' and 'svn update' output forward slashes (useful under Windows). * `--svn-command CMD' Use CMD when running svn, defaults to "svn". * `----' is used as a separator between arguments passed to `less' and arguments passed to `svn'. Limitations: The `e2ansi' package emits highlighted output once it has read the full input. For this reason, the output of "svn update" is not piped through `less'.