-# hl() highlighted less
-emulate -L zsh
-
-local theme lang
-theme=${HL_THEME:-""}
-case ${1} in
-(-l|--list)
- ( printf 'available languages (syntax parameter):\n\n' ;
- highlight --list-langs ; ) | less -SMr
- ;;
-(-t|--themes)
- ( printf 'available themes (style parameter):\n\n' ;
- highlight --list-themes ; ) | less -SMr
- ;;
-(-h|--help)
- printf 'usage: hl <syntax[:theme]> <file>\n'
- printf ' available options: --list (-l), --themes (-t), --help (-h)\n\n'
- printf ' Example: hl c main.c\n'
- ;;
-(*)
- if [[ -z ${2} ]] || (( ${#argv} > 2 )) ; then
- printf 'usage: hl <syntax[:theme]> <file>\n'
- printf ' available options: --list (-l), --themes (-t), --help (-h)\n'
- (( ${#argv} > 2 )) && printf ' Too many arguments.\n'
+# -*- shell-script -*-
+
+# Taken from:
+# https://dev.0x50.de/projects/ftzsh/repository/revisions/master/entry/functions/hl
+
+if ! [[ -x ${commands[highlight]} ]]; then
+ printf 'hl: Could not find `highlight'\'' binary!\n'
+ return 1
+fi
+
+local context file format lang suffix syntax theme o
+local -i nopager=0
+local -a pager hl_opts
+local -A opt syntaxmap
+
+while [[ $1 == -* ]]; do
+ case $1 in
+ (-c|--cat|--no-pager)
+ nopager=1
+ shift
+ ;;
+ (-F|--format)
+ opt[format]=$2
+ shift
+ shift
+ ;;
+ (-h|--help)
+ printf 'usage: hl [OPTION(s)] <file(s)>\n'
+ return 0
+ ;;
+ (-l|--list)
+ ( printf 'available languages (syntax parameter):\n\n' ;
+ highlight --list-langs ; ) | less -SM
+ return 0
+ ;;
+ (-P|--pager)
+ opt[pager]=$2
+ shift
+ shift
+ ;;
+ (-s|--syntax)
+ opt[syntax]=$2
+ shift
+ shift
+ ;;
+ (-t|--themes)
+ ( printf 'available themes (style parameter):\n\n' ;
+ highlight --list-themes ; ) | less -SM
+ return 0
+ ;;
+ (-T|--theme)
+ opt[theme]=$2
+ shift
+ shift
+ ;;
+ (*)
+ printf 'hl: Unknown option `%s'\''!\n' $1
+ printf 'usage: hl [OPTION(s)] <file(s)>\n'