`tmuxp edit`: EDITOR variable can't have arguments

未关闭
#801 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
52/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
python
领域
cli

调研方向

Start in tmuxp/cli/edit.py at the EDITOR handling and subprocess.call shown in the traceback. Reproduce with EDITOR="subl --new-window --wait" and tmuxp edit main. Done means the configuration file opens using the editor command and its arguments instead of raising FileNotFoundError.

由索引模型根据 Issue 内容生成。

描述

Step 1: Provide a summary of your problem

tmuxp edit [session-name] crashes if the EDITOR environment variable has arguments (i.e. spaces in the string are not considered).

Step 2: Provide tmuxp details
$ echo "$EDITOR"
subl --new-window --wait
$ tmuxp debug-info
-------------------------
environment:
	dist: macOS-12.5.1-arm64-arm-64bit
	arch: arm64
	uname: Darwin; JP-MBP-2022.local; 21.6.0
	version: Darwin Kernel Version 21.6.0: Wed Aug 10 14:28:23 PDT 2022; root:xnu-8020.141.5~2/RELEASE_ARM64_T6000
-------------------------
python version: 3.10.5 (v3.10.5:f377153967, Jun  6 2022, 12:36:10) [Clang 13.0.0 (clang-1300.0.29.30)]
system PATH: /usr/local/bin:/opt/homebrew/bin:/Library/TeX/texbin:/Library/Developer/CommandLineTools/usr/bin:/usr/bin:/bin:/usr/local/sbin:/opt/homebrew/sbin:/usr/sbin:/sbin
tmux version: 3.3
libtmux version: 0.14.2
tmuxp version: 1.13.1
tmux path: /opt/homebrew/bin/tmux
tmuxp path: /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/tmuxp
shell: /opt/homebrew/bin/bash
-------------------------
tmux sessions:
	main: 3 windows (created Sat Aug 27 09:33:49 2022) (attached)

tmux windows:
	1: wip* (3 panes) [213x62] [layout 4b7a,213x62,0,0{80x62,0,0,1,132x62,81,0[132x31,81,0,2,132x30,81,32,3]}] @1 (active)
	2: repos (4 panes) [213x62] [layout a0c1,213x62,0,0[213x30,0,0{106x30,0,0,4,106x30,107,0,5},213x31,0,31{106x31,0,31,6,106x31,107,31,7}]] @2
	3: scratch- (2 panes) [213x62] [layout 4659,213x62,0,0{106x62,0,0,8,106x62,107,0,9}] @3

tmux panes:
	1: [80x61] [history 0/50000, 6152 bytes] %1
	2: [132x30] [history 0/50000, 1125 bytes] %2 (active)
	3: [132x30] [history 0/50000, 1125 bytes] %3

tmux global options:
	activity-action other
	assume-paste-time 1
	base-index 1
	bell-action any
	default-command ''
	default-shell /opt/homebrew/bin/bash
	default-size 80x24
	destroy-unattached off
	detach-on-destroy on
	display-panes-active-colour cyan
	display-panes-colour brightblack
	display-panes-time 2000
	display-time 2000
	history-limit 50000
	key-table root
	lock-after-time 0
	lock-command "lock -np"
	message-command-style bg=brightblack,fg=cyan
	message-style bg=brightblack,fg=cyan
	mouse on
	prefix C-b
	prefix2 None
	renumber-windows on
	repeat-time 1500
	set-titles on
	set-titles-string "[#{session_name}] #{window_index}.#{pane_index} (#{window_name})"
	silence-action other
	status on
	status-bg default
	status-fg default
	status-format[0] "#[align=left range=left #{E: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} #{E:window-status-style}#{?#{&&:#{window_last_flag},#{!=:#{E:window-status-last-style},default}}, #{E:window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{E:window-status-bell-style},default}}, #{E:window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{E:window-status-activity-style},default}}, #{E: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 #{?#{!=:#{E:window-status-current-style},default},#{E:window-status-current-style},#{E:window-status-style}}#{?#{&&:#{window_last_flag},#{!=:#{E:window-status-last-style},default}}, #{E:window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{E:window-status-bell-style},default}}, #{E:window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{E:window-status-activity-style},default}}, #{E: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 #{E: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 1
	status-justify left
	status-keys emacs
	status-left "#[fg=black]#{?client_prefix,#[bg=green],#[bg=blue]} #{session_name} #[default] "
	status-left-length 20
	status-left-style default
	status-position bottom
	status-right " #[bg=brightblack] %F %H:%M #[bg=cyan,fg=black] #{user}@#{host_short} "
	status-right-length 80
	status-right-style default
	status-style bg=black,fg=white
	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:
	cursor-colour none
	cursor-style default
	aggressive-resize on
	allow-passthrough off
	allow-rename on
	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=red,fg=white
	copy-mode-mark-style bg=blue,fg=black
	fill-character ''
	main-pane-height 24
	main-pane-width 80
	mode-keys emacs
	mode-style bg=cyan,fg=black
	monitor-activity off
	monitor-bell on
	monitor-silence 0
	other-pane-height 0
	other-pane-width 0
	pane-active-border-style "#{?pane_in_mode,fg=cyan,#{?pane_synchronized,fg=red,fg=blue}}"
	pane-base-index 1
	pane-border-format " #{window_index}.#{pane_index} #{s|^/Users/jp/*|~/:pane_current_path}#{?pane_active,#(gitmux -cfg /Users/jp/.config/tmux/gitmux.conf \"#{pane_current_path}\"),} "
	pane-border-indicators colour
	pane-border-lines single
	pane-border-status top
	pane-border-style "#{?pane_in_mode,fg=brightblack,#{?pane_synchronized,fg=red,fg=brightblack}}"
	pane-colours
	popup-style default
	popup-border-style default
	popup-border-lines single
	remain-on-exit off
	remain-on-exit-format "Pane is dead (#{?#{!=:#{pane_dead_status},},status #{pane_dead_status},}#{?#{!=:#{pane_dead_signal},},signal #{pane_dead_signal},}, #{t:pane_dead_time})"
	scroll-on-clear on
	synchronize-panes off
	window-active-style default
	window-size latest
	window-style default
	window-status-activity-style bg=blue,fg=black
	window-status-bell-style bg=red,fg=white
	window-status-current-format " #{window_index}#{window_flags} #{window_name} "
	window-status-current-style bg=cyan,fg=black
	window-status-format " #{window_index}#{window_flags} #{window_name} "
	window-status-last-style fg=cyan
	window-status-separator ''
	window-status-style bg=brightblack
	wrap-search on
	xterm-keys on
Step 3: Describe the problem:
Steps to reproduce:
  1. tmuxp edit main
Observed Results:
Traceback (most recent call last):
  File "/usr/local/bin/tmuxp", line 8, in <module>
    sys.exit(cli.cli())
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/tmuxp/cli/edit.py", line 15, in command_edit
    subprocess.call([sys_editor, config])
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 345, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 969, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 1845, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'subl --new-window --wait'
Expected Results:

The configuration file should be opened by the editor specified in the EDITOR environment variable.

Relevant Code:

The issue is fixed by changing lines 14 and 15 of tmuxp/cli/edit.py to:

    sys_editor = os.environ.get("EDITOR", "vim").split()
    subprocess.call(sys_editor + [config])
主要语言
Python
星标
4.6k
派生
248
平均合并
2 小时 13 分钟
30 天内合并 PR
1

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

tmux-python/tmuxp 的其他 Issue

查看 tmux-python/tmuxp 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。