summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Auernhammer <github@aead.dev>2025-01-04 10:30:32 +0100
committerGitHub <noreply@github.com>2025-01-04 18:30:32 +0900
commit120cd7f25a8209297f15b0a79b36c44b30e641fb (patch)
tree60e91ffcaeca4fcae11a2b2dc76b1533659493b2
parentfb3bf6c9841d849ec459fc6b251b4aa0f16d8038 (diff)
downloadfzf-120cd7f25a8209297f15b0a79b36c44b30e641fb.tar.gz
Add `border-native` option to `--tmux` flag (#4157)
This commit adds the `border-native` resulting in the following: ``` --tmux[=[center|top|bottom|left|right][,SIZE[%]][,SIZE[%]][,border-native]] ``` By default, when not specified, the `-B` flag is passed to the `tmux popup-window` command such that no border is drawn around the tmux popup window. When the `border-native` option is present, the `-B` flag is omitted and the popup window is drawn using the border style configured in the tmux config file. Fixes #4156 Signed-off-by: Andreas Auernhammer <github@aead.dev> Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
-rw-r--r--ADVANCED.md2
-rw-r--r--README.md2
-rw-r--r--man/man1/fzf.17
-rw-r--r--src/options.go15
-rw-r--r--src/tmux.go16
5 files changed, 30 insertions, 12 deletions
diff --git a/ADVANCED.md b/ADVANCED.md
index b152d5a6..bafe9708 100644
--- a/ADVANCED.md
+++ b/ADVANCED.md
@@ -128,7 +128,7 @@ fzf --height 70% --tmux 70%
You can also specify the position, width, and height of the popup window in
the following format:
-* `[center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]`
+* `[center|top|bottom|left|right][,SIZE[%]][,SIZE[%][,border-native]]`
```sh
# 100% width and 60% height
diff --git a/README.md b/README.md
index 1172d12f..0faa552e 100644
--- a/README.md
+++ b/README.md
@@ -343,7 +343,7 @@ fzf --height -3
With `--tmux` option, fzf will start in a tmux popup.
```sh
-# --tmux [center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]
+# --tmux [center|top|bottom|left|right][,SIZE[%]][,SIZE[%][,border-native]]
fzf --tmux center # Center, 50% width and height
fzf --tmux 80% # Center, 80% width and height
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index 28d27f18..8d499697 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -271,7 +271,7 @@ Adaptive height has the following limitations:
Minimum height when \fB\-\-height\fR is given in percent (default: 10).
Ignored when \fB\-\-height\fR is not specified.
.TP
-.BI "\-\-tmux" "[=[center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]]"
+.BI "\-\-tmux" "[=[center|top|bottom|left|right][,SIZE[%]][,SIZE[%]][,border-native]]"
Start fzf in a tmux popup (default \fBcenter,50%\fR). Requires tmux 3.3 or
later. This option is ignored if you are not running fzf inside tmux.
@@ -286,7 +286,10 @@ e.g.
fzf \-\-tmux bottom,30%
# Popup on the top with 80% width and 40% height
- fzf \-\-tmux top,80%,40%\fR
+ fzf \-\-tmux top,80%,40%
+
+ # Popup with a native tmux border in the center with 80% width and height
+ fzf \-\-tmux center,80%,border\-native\fR
.TP
.BI "\-\-layout=" "LAYOUT"
diff --git a/src/options.go b/src/options.go
index 0b6250f3..a3096d11 100644
--- a/src/options.go
+++ b/src/options.go
@@ -77,7 +77,7 @@ Usage: fzf [options]
(default: 10)
--tmux[=OPTS] Start fzf in a tmux popup (requires tmux 3.3+)
[center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]
- (default: center,50%)
+ [,border-native] (default: center,50%)
--layout=LAYOUT Choose layout: [default|reverse|reverse-list]
--border[=STYLE] Draw border around the finder
[rounded|sharp|bold|block|thinblock|double|horizontal|vertical|
@@ -254,6 +254,7 @@ type tmuxOptions struct {
height sizeSpec
position windowPosition
index int
+ border bool
}
type layoutType int
@@ -316,11 +317,19 @@ func parseTmuxOptions(arg string, index int) (*tmuxOptions, error) {
var err error
opts := defaultTmuxOptions(index)
tokens := splitRegexp.Split(arg, -1)
- errorToReturn := errors.New("invalid tmux option: " + arg + " (expected: [center|top|bottom|left|right][,SIZE[%]][,SIZE[%]])")
- if len(tokens) == 0 || len(tokens) > 3 {
+ errorToReturn := errors.New("invalid tmux option: " + arg + " (expected: [center|top|bottom|left|right][,SIZE[%]][,SIZE[%][,border-native]])")
+ if len(tokens) == 0 || len(tokens) > 4 {
return nil, errorToReturn
}
+ for i, token := range tokens {
+ if token == "border-native" {
+ tokens = append(tokens[:i], tokens[i+1:]...) // cut the 'border-native' option
+ opts.border = true
+ break
+ }
+ }
+
// Defaults to 'center'
switch tokens[0] {
case "top", "up":
diff --git a/src/tmux.go b/src/tmux.go
index b2315dcd..e459000a 100644
--- a/src/tmux.go
+++ b/src/tmux.go
@@ -9,13 +9,16 @@ import (
func runTmux(args []string, opts *Options) (int, error) {
// Prepare arguments
- fzf := args[0]
- args = append([]string{"--bind=ctrl-z:ignore"}, args[1:]...)
- if opts.BorderShape == tui.BorderUndefined {
+ fzf, rest := args[0], args[1:]
+ args = []string{"--bind=ctrl-z:ignore"}
+ if !opts.Tmux.border && opts.BorderShape == tui.BorderUndefined {
args = append(args, "--border")
}
+ if opts.Tmux.border && opts.Margin == defaultMargin() {
+ args = append(args, "--margin=0,1")
+ }
argStr := escapeSingleQuote(fzf)
- for _, arg := range args {
+ for _, arg := range append(args, rest...) {
argStr += " " + escapeSingleQuote(arg)
}
argStr += ` --no-tmux --no-height`
@@ -33,7 +36,10 @@ func runTmux(args []string, opts *Options) (int, error) {
// M Both The mouse position
// W Both The window position on the status line
// S -y The line above or below the status line
- tmuxArgs := []string{"display-popup", "-E", "-B", "-d", dir}
+ tmuxArgs := []string{"display-popup", "-E", "-d", dir}
+ if !opts.Tmux.border {
+ tmuxArgs = append(tmuxArgs, "-B")
+ }
switch opts.Tmux.position {
case posUp:
tmuxArgs = append(tmuxArgs, "-xC", "-y0")