summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2015-08-13 15:24:50 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2015-08-13 15:27:47 -0700
commit73824908aab1d910996cf4db7baf722aecc32d31 (patch)
treec71ff22885f10ead18bfc1cccc7d2096c8a7f073
parent397c18810e3226a2ff25d0b90b9ee17354d40d2b (diff)
Added `--bash-completion` option.
This generates a bash completion script. To use: eval "$(pandoc --bash-completion)"
-rw-r--r--README7
-rw-r--r--data/bash_completion.tpl62
-rw-r--r--pandoc.cabal2
-rw-r--r--pandoc.hs19
4 files changed, 89 insertions, 1 deletions
diff --git a/README b/README
index cf662ffd0..5a75c5a0b 100644
--- a/README
+++ b/README
@@ -250,6 +250,13 @@ General options
`epub.css`, `templates`, `slidy`, `slideous`, or `s5` directory
placed in this directory will override pandoc's normal defaults.
+`--bash-completiion`
+
+: Generate a bash completion script. to enable bash completion
+ with pandoc, add this to your `.bashrc`:
+
+ eval "$(pandoc --bash-completion)"
+
`--verbose`
: Give verbose debugging output. Currently this only has an effect
diff --git a/data/bash_completion.tpl b/data/bash_completion.tpl
new file mode 100644
index 000000000..6d7e17215
--- /dev/null
+++ b/data/bash_completion.tpl
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+# This script enables bash autocompletion for pandoc. To enable
+# bash completion, add this to your .bashrc:
+# eval "$(pandoc --bash-completion)"
+
+_pandoc()
+{
+ local cur prev opts lastc informats outformats datadir
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ # These should be filled in by pandoc:
+ opts="%s"
+ informats="%s"
+ outformats="%s"
+ datadir="%s"
+
+ case "${prev}" in
+ --from|-f|--read|-r)
+ COMPREPLY=( $(compgen -W "${informats}" -- ${cur}) )
+ return 0
+ ;;
+ --to|-t|--write|-w|-D|--print-default-template)
+ COMPREPLY=( $(compgen -W "${outformats}" -- ${cur}) )
+ return 0
+ ;;
+ --email-obfuscation)
+ COMPREPLY=( $(compgen -W "references javascript none" -- ${cur}) )
+ return 0
+ ;;
+ --latex-engine)
+ COMPREPLY=( $(compgen -W "pdflatex lualatex xelatex" -- ${cur}) )
+ return 0
+ ;;
+ --print-default-data-file)
+ COMPREPLY=( $(compgen -W "reference.odt reference.docx $(find ${datadir} | sed -e 's/.*\/data\///')" -- ${cur}) )
+ return 0
+ ;;
+ --highlight-style)
+ COMPREPLY=( $(compgen -W "pygments tango espresso zenburn kate monochrome haddock" -- ${cur}) )
+ return 0
+ ;;
+ *)
+ ;;
+ esac
+
+ case "${cur}" in
+ -*)
+ COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+ return 0
+ ;;
+ *)
+ COMPREPLY=( $(compgen -f ${cur}) )
+ return 0
+ ;;
+ esac
+
+}
+
+complete -F _pandoc pandoc
diff --git a/pandoc.cabal b/pandoc.cabal
index 719a480b7..f6884adb2 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -105,6 +105,8 @@ Data-Files:
data/dzslides/template.html
-- sample lua custom writer
data/sample.lua
+ -- bash completion template
+ data/bash_completion.tpl
-- documentation
README, COPYRIGHT
Extra-Source-Files:
diff --git a/pandoc.hs b/pandoc.hs
index fb9b9abbf..81d4584e3 100644
--- a/pandoc.hs
+++ b/pandoc.hs
@@ -71,7 +71,8 @@ import qualified Data.Text as T
import Control.Applicative ((<$>), (<|>))
import Text.Pandoc.Readers.Txt2Tags (getT2TMeta)
import Data.Monoid
-
+import Paths_pandoc (getDataDir)
+import Text.Printf (printf)
import Text.Pandoc.Error
type Transform = Pandoc -> Pandoc
@@ -880,6 +881,22 @@ options =
(\opt -> return opt { optVerbose = True }))
"" -- "Verbose diagnostic output."
+ , Option "" ["bash-completion"]
+ (NoArg
+ (\_ -> do
+ ddir <- getDataDir
+ tpl <- readDataFileUTF8 Nothing "bash_completion.tpl"
+ let optnames (Option shorts longs _ _) =
+ map (\c -> ['-',c]) shorts ++
+ map ("--" ++) longs
+ let allopts = unwords (concatMap optnames options)
+ UTF8.hPutStrLn stdout $ printf tpl allopts
+ (unwords (map fst readers))
+ (unwords ("pdf": map fst writers))
+ ddir
+ exitWith ExitSuccess ))
+ "" -- "Print bash completion script"
+
, Option "v" ["version"]
(NoArg
(\_ -> do