240521.1 · 076b3d0a9af7e69c8e5232d49cfeeadcfd45e9ef
Embed man page in the binary and show it on 'fzf --man'
reading declarations
@@ -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)
@@ -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)
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -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 }