tmux-python/tmuxp

passing options to tmux command: libtmux.exc.UnknownOption

m-faith opened this issue · 4 comments

Step 1: Provide a summary of your problem

I thought we could specify tmux options like tmux -L socketname -f .config/custom.conf by doing something like:

session_name: name-of-session
options:
 ' -L': socketname
  '-f': .config/custom.conf

…but either I'm mistaken about that or doing it wrong.

Step 2: Provide tmuxp details

Output of tmuxp debug-info:

-------------------------
environment:
	dist: Linux-5.19.0-76051900-generic-x86_64-with-glibc2.35
	arch: x86_64
	uname: Linux; pop-os; 5.19.0-76051900-generic
	version: #202207312230~1660780566~22.04~9d60db1 SMP PREEMPT_DYNAMIC Thu A
-------------------------
python version: 3.10.6 (main, Nov  2 2022, 18:53:38) [GCC 11.3.0]
system PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/m/.local/bin:/home/m/code/bin:/usr/local/go/bin:/home/m/.local/lib/go/bin:/home/m/.local/lib/lua/bin:/home/m/code/software_projects/luarocks-3.8.0/lua_modules/bin:/home/m/.local/lib/rust/cargo/bin
tmux version: 3.2
libtmux version: 0.14.2
tmuxp version: 1.13.1
tmux path: /usr/bin/tmux
tmuxp path: /home/m/.local/lib/python3.10/site-packages/tmuxp
shell: /usr/bin/zsh
-------------------------
tmux sessions:
	Diary: 2 windows (created Fri Feb 10 20:52:46 2023)
	Email: 1 windows (created Fri Feb 10 20:52:46 2023) (attached)
	PM: 1 windows (created Fri Feb 10 20:52:47 2023)
	Projects: 4 windows (created Fri Feb 10 20:52:48 2023) (attached)
	docs: 1 windows (created Fri Feb 10 20:52:46 2023) (attached)
	lrn_parsing-text-files_python: 1 windows (created Sat Feb 11 18:19:15 2023)

tmux windows:
	0: docs* (1 panes) [83x51] [layout ade2,83x51,0,0,5] @3 (active)

tmux panes:
	0: [83x50] [history 0/2000, 22863 bytes] %5 (active)

tmux global options:
	@plugin tmux-plugins/vim-tmux-focus-events
	activity-action other
	assume-paste-time 1
	base-index 0
	bell-action any
	default-command ''
	default-shell /usr/bin/zsh
	default-size 80x24
	destroy-unattached off
	detach-on-destroy on
	display-panes-active-colour red
	display-panes-colour blue
	display-panes-time 1000
	display-time 750
	history-limit 2000
	key-table root
	lock-after-time 0
	lock-command "lock -np"
	message-command-style bg=black,fg=yellow
	message-style bg=yellow,fg=black
	mouse on
	prefix C-a
	prefix2 None
	renumber-windows off
	repeat-time 500
	set-titles off
	set-titles-string "#S:#I:#W - \"#T\" #{session_alerts}"
	silence-action other
	status on
	status-bg colour234
	status-fg colour137
	status-format[0] "#[align=left range=left #{status-left-style}]#[push-default]#{T;=/#{status-left-length}:status-left}#[pop-default]#[norange default]#[list=on align=#{status-justify}]#[list=left-marker]<#[list=right-marker]>#[list=on]#{W:#[range=window|#{window_index} #{window-status-style}#{?#{&&:#{window_last_flag},#{!=:#{window-status-last-style},default}}, #{window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{window-status-bell-style},default}}, #{window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{window-status-activity-style},default}}, #{window-status-activity-style},}}]#[push-default]#{T:window-status-format}#[pop-default]#[norange default]#{?window_end_flag,,#{window-status-separator}},#[range=window|#{window_index} list=focus #{?#{!=:#{window-status-current-style},default},#{window-status-current-style},#{window-status-style}}#{?#{&&:#{window_last_flag},#{!=:#{window-status-last-style},default}}, #{window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{window-status-bell-style},default}}, #{window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{window-status-activity-style},default}}, #{window-status-activity-style},}}]#[push-default]#{T:window-status-current-format}#[pop-default]#[norange list=on default]#{?window_end_flag,,#{window-status-separator}}}#[nolist align=right range=right #{status-right-style}]#[push-default]#{T;=/#{status-right-length}:status-right}#[pop-default]#[norange default]"
	status-format[1] "#[align=centre]#{P:#{?pane_active,#[reverse],}#{pane_index}[#{pane_width}x#{pane_height}]#[default] }"
	status-interval 15
	status-justify left
	status-keys vi
	status-left "#[fg=white,bg=black] Do Ctrl+S to save and run the script"
	status-left-length 40
	status-left-style default
	status-position bottom
	status-right "#[fg=colour233,bg=colour241,bold]#(grep 'Course_Name: ' .lesson.yml | sed 's/Course_Name:/ /') #[fg=colour233,bg=colour245,bold]#(grep TODO .lesson.yml | head -n 1 | grep -oe '[0-9]*' | sed 's/^/ Step /') "
	status-right-length 95
	status-right-style default
	status-style bg=green,fg=black
	update-environment[0] DISPLAY
	update-environment[1] KRB5CCNAME
	update-environment[2] SSH_ASKPASS
	update-environment[3] SSH_AUTH_SOCK
	update-environment[4] SSH_AGENT_PID
	update-environment[5] SSH_CONNECTION
	update-environment[6] WINDOWID
	update-environment[7] XAUTHORITY
	visual-activity off
	visual-bell off
	visual-silence off
	word-separators " "

tmux window options:
	aggressive-resize off
	allow-rename off
	alternate-screen on
	automatic-rename on
	automatic-rename-format "#{?pane_in_mode,[tmux],#{pane_current_command}}#{?pane_dead,[dead],}"
	clock-mode-colour blue
	clock-mode-style 24
	copy-mode-match-style bg=cyan,fg=black
	copy-mode-current-match-style bg=magenta,fg=black
	copy-mode-mark-style bg=red,fg=black
	main-pane-height 24
	main-pane-width 80
	mode-keys vi
	mode-style bg=yellow,fg=black
	monitor-activity off
	monitor-bell on
	monitor-silence 0
	other-pane-height 0
	other-pane-width 0
	pane-active-border-style "bg=colour236 fg=colour245"
	pane-base-index 0
	pane-border-format " [#{pane_index}] #{pane_title} "
	pane-border-lines single
	pane-border-status top
	pane-border-style "bg=default fg=colour239"
	remain-on-exit off
	synchronize-panes off
	window-active-style fg=colour15,bg=colour235
	window-size latest
	window-style fg=colour245,bg=colour236
	window-status-activity-style reverse
	window-status-bell-style reverse
	window-status-current-format ''
	window-status-current-style default
	window-status-format ''
	window-status-last-style default
	window-status-separator " "
	window-status-style default
	wrap-search on
	xterm-keys on

Step 3: Describe the problem:

Options do not get passed to tmux command. Error is produced instead.

Steps to reproduce:

Use the config:

session_name: name-of-session
options:
  -L: socketname
  -f: .config/custom.conf

Observed Results:

❯ tmuxp load .
[Loading] /home/m/code/lrn/parsing_text_files__python/.tmuxp.yaml
[step-1 39c8f8f] Update instructions for step 1.
 1 file changed, 3 deletions(-)
Traceback (most recent call last):
  File "/home/m/.local/bin/tmuxp", line 8, in <module>
    sys.exit(cli.cli())
  File "/home/m/.local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/m/.local/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/m/.local/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/m/.local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/m/.local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/m/.local/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/m/.local/lib/python3.10/site-packages/tmuxp/cli/load.py", line 573, in command_load
    load_workspace(config[-1], **tmux_options)
  File "/home/m/.local/lib/python3.10/site-packages/tmuxp/cli/load.py", line 418, in load_workspace
    _load_attached(builder, detached)
  File "/home/m/.local/lib/python3.10/site-packages/tmuxp/cli/load.py", line 159, in _load_attached
    builder.build()
  File "/home/m/.local/lib/python3.10/site-packages/tmuxp/workspacebuilder.py", line 253, in build
    self.session.set_option(option, value)
  File "/home/m/.local/lib/python3.10/site-packages/libtmux/session.py", line 451, in set_option
    handle_option_error(proc.stderr[0])
  File "/home/m/.local/lib/python3.10/site-packages/libtmux/common.py", line 750, in handle_option_error
    raise exc.UnknownOption(error)
libtmux.exc.UnknownOption: tmux: unknown option -- f
↵ Error. Exit status 1.   

Expected Results:

I thought options: would be provided as options to the tmux command.

tmuxinator allows for passing options to tmux like this:

tmux_options: -L lrn -f .config/tmux.conf

I just tried that with tmuxp.

No errors, and it launches the tmux session. BUT...

tmux -L lrn ls yields error connecting to /tmp/tmux-1000/lrn (No such file or directory) and /tmp/tmux-100/default appears to still be the only socket/server/thing running. Whereas if I run the command tmux -L lrn new-session then /tmp/tmux-1000/lrn gets created.

Oh, tmuxinator has socket_name: lrn for doing tmux -L lrn .... Socket name gets its own thing rather than using the tmux_options: for the socket option. But that's tmuxinator. How does Tmuxp handle this?

Thought I found the solution at https://tmuxp.git-pull.com/about.html which at the bottom under Minor tweaks heaeding says:

$ tmuxp -L, $ tmuxp -S for sockets and $ tmuxp -f for config file.

But no, neither:

  • tmuxp -S /tmp/tmux-1000/lrn load .
  • tmuxp -L lrn load .

...neither works. I tried both with and without the space following the -S/-L. Either way it errors:

Usage: tmuxp [OPTIONS] COMMAND [ARGS]...
Try 'tmuxp -h' for help.

Error: No such option: -S
↵ Error. Exit status 2.
❯ tmuxp -V
tmuxp 1.13.1, libtmux 0.14.2
❯ tmux -V
tmux 3.2a