make default width to inf, add 'short-circuit', and map it to {cwd}

This commit is contained in:
Guillaume Leclerc 2016-05-15 18:27:40 +02:00
parent e465f94a8c
commit 438ae75203

View file

@ -10,7 +10,6 @@ import locale
import builtins import builtins
import subprocess import subprocess
import shutil import shutil
import math
from itertools import chain from itertools import chain
from warnings import warn from warnings import warn
from pprint import pformat from pprint import pformat
@ -194,7 +193,7 @@ DEFAULT_VALUES = {
'PUSHD_SILENT': False, 'PUSHD_SILENT': False,
'RAISE_SUBPROC_ERROR': False, 'RAISE_SUBPROC_ERROR': False,
'RIGHT_PROMPT': '', 'RIGHT_PROMPT': '',
'DYNAMIC_CWD_WIDTH': '20', 'DYNAMIC_CWD_WIDTH': 'inf',
'SHELL_TYPE': 'best', 'SHELL_TYPE': 'best',
'SUGGEST_COMMANDS': True, 'SUGGEST_COMMANDS': True,
'SUGGEST_MAX_NUM': 5, 'SUGGEST_MAX_NUM': 5,
@ -1015,36 +1014,36 @@ def _collapsed_pwd():
def _dynamically_collapsed_pwd(): def _dynamically_collapsed_pwd():
sep = get_sep() sep = get_sep()
pwd = _replace_home_cwd().split(sep) originial_path = _replace_home_cwd()
pwd = originial_path.split(sep)
cols, _ = shutil.get_terminal_size() cols, _ = shutil.get_terminal_size()
targetWidthRaw = builtins.__xonsh_env__['DYNAMIC_CWD_WIDTH'] targetWidthRaw = builtins.__xonsh_env__['DYNAMIC_CWD_WIDTH']
if (targetWidthRaw[-1] == '%'): if (targetWidthRaw[-1] == '%'):
targetWidth = math.floor(float(targetWidthRaw[:-1]) / 100 * cols) targetWidth = (cols * float(targetWidthRaw[:-1])) // 100
else: else:
targetWidth = int(targetWidthRaw) targetWidth = float(targetWidthRaw)
if targetWidth == float('inf'):
last = pwd.pop() return originial_path
remaining_space = targetWidth - len(last) else:
# Reserve space for separators last = pwd.pop()
remaining_space_for_text = remaining_space - len(pwd) remaining_space = targetWidth - len(last)
# Reserve space for separators
parts = [] remaining_space_for_text = remaining_space - len(pwd)
for i in range(len(pwd)):
part = pwd[i]
part_len = min(len(part), max(1, math.floor(remaining_space_for_text / (len(pwd) - i))))
remaining_space_for_text -= part_len
reduced_part = part[0:part_len]
parts.append(reduced_part)
parts.append(last)
full = sep.join(parts)
if (len(full) > targetWidth):
full = full[-targetWidth:]
print("full", full)
return full
parts = []
for i in range(len(pwd)):
part = pwd[i]
part_len = int(min(len(part), max(1, remaining_space_for_text // (len(pwd) - i))))
remaining_space_for_text -= part_len
reduced_part = part[0:part_len]
parts.append(reduced_part)
parts.append(last)
full = sep.join(parts)
if (len(full) > targetWidth):
full = full[int(-targetWidth):]
return full
def _current_job(): def _current_job():
j = builtins.__xonsh_active_job__ j = builtins.__xonsh_active_job__
@ -1081,11 +1080,10 @@ FORMATTER_DICT = dict(
user=os.environ.get(USER, '<user>'), user=os.environ.get(USER, '<user>'),
prompt_end='#' if IS_ROOT else '$', prompt_end='#' if IS_ROOT else '$',
hostname=socket.gethostname().split('.', 1)[0], hostname=socket.gethostname().split('.', 1)[0],
cwd=_replace_home_cwd, cwd=_dynamically_collapsed_pwd,
cwd_dir=lambda: os.path.dirname(_replace_home_cwd()), cwd_dir=lambda: os.path.dirname(_replace_home_cwd()),
cwd_base=lambda: os.path.basename(_replace_home_cwd()), cwd_base=lambda: os.path.basename(_replace_home_cwd()),
short_cwd=_collapsed_pwd, short_cwd=_collapsed_pwd,
dynamic_cwd=_dynamically_collapsed_pwd,
curr_branch=current_branch, curr_branch=current_branch,
branch_color=branch_color, branch_color=branch_color,
branch_bg_color=branch_bg_color, branch_bg_color=branch_bg_color,