diff --git a/Makefile b/Makefile index f4abe6e6..f14c72c3 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ GOOS ?= $(shell $(GO) env GOOS) MAKEFILE := $(realpath $(lastword $(MAKEFILE_LIST))) ROOT_DIR := $(shell dirname $(MAKEFILE)) -SOURCES := $(wildcard *.go src/*.go src/*/*.go shell/*sh) $(MAKEFILE) +SOURCES := $(wildcard *.go src/*.go src/*/*.go shell/*sh man/man1/*.1) $(MAKEFILE) ifdef FZF_VERSION VERSION := $(FZF_VERSION) diff --git a/main.go b/main.go index 1e05345c..8ba0aed2 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( _ "embed" "fmt" "os" + "os/exec" "strings" fzf "github.com/junegunn/fzf/src" @@ -28,6 +29,9 @@ var zshCompletion []byte //go:embed shell/key-bindings.fish var fishKeyBindings []byte +//go:embed man/man1/fzf.1 +var manPage []byte + func printScript(label string, content []byte) { fmt.Println("### " + label + " ###") fmt.Println(strings.TrimSpace(string(content))) @@ -76,6 +80,20 @@ func main() { } return } + if options.Man { + file := fzf.WriteTemporaryFile([]string{string(manPage)}, "\n") + if len(file) == 0 { + fmt.Print(string(manPage)) + return + } + defer os.Remove(file) + cmd := exec.Command("man", file) + cmd.Stdout = os.Stdout + if err := cmd.Run(); err != nil { + fmt.Print(string(manPage)) + } + return + } code, err := fzf.Run(options) exit(code, err) diff --git a/man/man1/fzf.1 b/man/man1/fzf.1 index ea66597d..4c7578ae 100644 --- a/man/man1/fzf.1 +++ b/man/man1/fzf.1 @@ -898,9 +898,16 @@ e.g. # Choose port automatically and export it as $FZF_PORT to the child process fzf --listen --bind 'start:execute-silent:echo $FZF_PORT > /tmp/fzf-port' \fR +.SS Help .TP .B "--version" Display version information and exit +.TP +.B "--help" +Show help message +.TP +.B "--man" +Show man page .SS Directory traversal .TP diff --git a/src/functions.go b/src/functions.go index 8d29db74..59ca0bad 100644 --- a/src/functions.go +++ b/src/functions.go @@ -6,7 +6,7 @@ import ( "unsafe" ) -func writeTemporaryFile(data []string, printSep string) string { +func WriteTemporaryFile(data []string, printSep string) string { f, err := os.CreateTemp("", "fzf-temp-*") if err != nil { // Unable to create temporary file diff --git a/src/options.go b/src/options.go index 3a6de009..6d228fe3 100644 --- a/src/options.go +++ b/src/options.go @@ -127,7 +127,6 @@ const Usage = `usage: fzf [options] --with-shell=STR Shell command and flags to start child processes with --listen[=[ADDR:]PORT] Start HTTP server to receive actions (POST /) (To allow remote process execution, use --listen-unsafe) - --version Display version information and exit Directory traversal (Only used when $FZF_DEFAULT_COMMAND is not set) --walker=OPTS [file][,dir][,follow][,hidden] (default: file,follow,hidden) @@ -140,6 +139,11 @@ const Usage = `usage: fzf [options] --zsh Print script to set up Zsh shell integration --fish Print script to set up Fish shell integration + Help + --version Display version information and exit + --help Show this message + --man Show man page + Environment variables FZF_DEFAULT_COMMAND Default command to use when input is tty FZF_DEFAULT_OPTS Default options (e.g. '--layout=reverse --info=inline') @@ -387,6 +391,7 @@ type Options struct { Bash bool Zsh bool Fish bool + Man bool Fuzzy bool FuzzyAlgo algo.Algo Scheme string @@ -493,6 +498,7 @@ func defaultOptions() *Options { Bash: false, Zsh: false, Fish: false, + Man: false, Fuzzy: true, FuzzyAlgo: algo.FuzzyMatchV2, Scheme: "default", @@ -1865,10 +1871,14 @@ func parseOptions(opts *Options, allArgs []string) error { opts.Fish = false opts.Help = false opts.Version = false + opts.Man = false } for i := 0; i < len(allArgs); i++ { arg := allArgs[i] switch arg { + case "--man": + clearExitingOpts() + opts.Man = true case "--bash": clearExitingOpts() opts.Bash = true diff --git a/src/proxy.go b/src/proxy.go index bbac0292..a1e8f805 100644 --- a/src/proxy.go +++ b/src/proxy.go @@ -98,7 +98,7 @@ func runProxy(commandPrefix string, cmdBuilder func(temp string) *exec.Cmd, opts exports[idx] = fmt.Sprintf("export %s=%s", pair[0], escapeSingleQuote(pair[1])) } } - temp := writeTemporaryFile(append(exports, command), "\n") + temp := WriteTemporaryFile(append(exports, command), "\n") defer os.Remove(temp) cmd := cmdBuilder(temp) diff --git a/src/terminal.go b/src/terminal.go index f50d7698..8f154dae 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -2840,7 +2840,7 @@ func replacePlaceholder(params replacePlaceholderParams) (string, []string) { } if flags.file { - file := writeTemporaryFile(replacements, params.printsep) + file := WriteTemporaryFile(replacements, params.printsep) tempFiles = append(tempFiles, file) return file }