TERM
Eshell
但是两者的环境变量中的 COLUMNS 和 LINES 都是一致的,TERM也都是 xterm-256color
, PAGER也都是 cat
。到底是什么在起作用呢
主要还是 hombrew 计算错误(获取不到 eshell 缓冲区宽度)吧,brew list
在我这也只有两列。ls
命令就跟 term 下一样了。
UPDATE 2018-05-28 18.14.32
两个问题:
hombrew 没有导出变量 COLUMNS
,所以即便额外 export COLUMNS=xxx; brew search mysql
在 homebrew 内部仍然获取不到 xxx 这个值。
hombrew 使用的不是 $COLUMNS
而是 Tty.width
。
谢谢,我也去读了一波源码
def width
width = `/bin/stty size 2>/dev/null`.split[1]
width ||= `/usr/bin/tput cols 2>/dev/null`.split[0]
width ||= 80
width.to_i
end
问题在于
Eshell 下 ruby -e 'puts `/bin/stty size 2>/dev/null`'
的结果是0 0
Edit: eshell 下 stty size
的结果是 0 0,可能是一个 eshell 的bug
有一个类似的问题
里面提到,直接使用 ENV['COLUMNS']
作为 fallback 应该是合理的
我不认为是 Eshell 的 bug,因为 /usr/bin/tput cols
就能取到正确的值。
再说环境变量,不管是在 Eshell 还是其它地方直接运行 ruby:
~ $ ruby -e 'puts ENV["COLUMNS"]'
272
然而在 hombrew (formater.rb 文件 columns 方法,输出格式化就在这里) 中打印出来是空的:
puts ">>> columns: #{ENV['COLUMNS']}"
整个 ENV 遍历出来只有 homebrew 自己导出的若干个变量。
貌似把这行去掉,然后再传入 COLUMNS
就好了。Eshell 中 stty size
等不到正确结果,而 tput cols
可以,Homebrew 看起是优先使用前者。
diff --git a/Library/Homebrew/utils/tty.rb b/Library/Homebrew/utils/tty.rb
index 81d5f00d7b..d50d7c6771 100644
--- a/Library/Homebrew/utils/tty.rb
+++ b/Library/Homebrew/utils/tty.rb
@@ -6,9 +6,9 @@ module Tty
end
def width
- width = `/bin/stty size 2>/dev/null`.split[1]
width ||= `/usr/bin/tput cols 2>/dev/null`.split[0]
width ||= 80
+ puts width
width.to_i
end
diff --git a/bin/brew b/bin/brew
index 4a874ab9a7..6d425af571 100755
--- a/bin/brew
+++ b/bin/brew
@@ -68,7 +68,7 @@ then
# Filter all but the specific variables.
for VAR in HOME SHELL PATH TERM LOGNAME USER CI TRAVIS SSH_AUTH_SOCK SUDO_ASKPASS \
http_proxy https_proxy ftp_proxy no_proxy all_proxy HTTPS_PROXY FTP_PROXY ALL_PROXY \
- "${!HOMEBREW_@}" "${!TRAVIS_@}"
+ "${!HOMEBREW_@}" "${!TRAVIS_@}" COLUMNS
do
# Skip if variable value is empty.
[[ -z "${!VAR}" ]] && continue
感谢~我提了个pr,