`tmuxp edit`: EDITOR variable can't have arguments
还没有人认领这个 Issue。
评估
调研方向
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:
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
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
tmux-python/tmuxp 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
tmux-python/tmuxp#1026 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
tmux-python/tmuxp#939 · 1 条评论 ·
-
enhancement WorkspaceBuilder
难度 4/5 3-5 天 新手友好度 48/100
tmux-python/tmuxp#1062 ·
-
enhancement need-comments WorkspaceBuilder
难度 5/5 一周以上 新手友好度 35/100
tmux-python/tmuxp#1058 · 2 条评论 ·
-
bug
难度 4/5 3-5 天 新手友好度 45/100
tmux-python/tmuxp#1053 · 10 条评论 ·
查看 tmux-python/tmuxp 的全部 Issue
相似的 Issue
-
area/auth bug comp/agent P3 platform/discord type/security
难度 2/5 1-3 小时 新手友好度 88/100
NousResearch/hermes-agent#117848 ·
-
难度 2/5 1-3 小时 新手友好度 74/100
bancolombia/sentinel#23 ·
-
test md 未关闭CI
难度 2/5 1-3 小时 新手友好度 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
难度 2/5 1-3 小时 新手友好度 74/100
langchain-ai/deepagents#6450 ·
-
bug client
难度 2/5 1-3 小时 新手友好度 88/100