diff --git a/powerline/bindings/zsh/powerline.zsh b/powerline/bindings/zsh/powerline.zsh index 68c589bb..6e8206fe 100644 --- a/powerline/bindings/zsh/powerline.zsh +++ b/powerline/bindings/zsh/powerline.zsh @@ -115,10 +115,11 @@ _powerline_setup_prompt() { local add_args='--last_exit_code=$? --last_pipe_status="$pipestatus"' add_args+=' --renderer_arg="client_id=$$"' add_args+=' --jobnum=$_POWERLINE_JOBNUM' + local add_args_2=$add_args' -R parser_state=${(%%):-%_} -R local_theme=continuation' PS1='$($POWERLINE_COMMAND shell left -r zsh_prompt '$add_args')' RPS1='$($POWERLINE_COMMAND shell right -r zsh_prompt '$add_args')' - PS2='$($POWERLINE_COMMAND shell left -r zsh_prompt -R local_theme=continuation '$add_args')' - RPS2='$($POWERLINE_COMMAND shell right -r zsh_prompt -R local_theme=continuation '$add_args')' + PS2='$($POWERLINE_COMMAND shell left -r zsh_prompt '$add_args_2')' + RPS2='$($POWERLINE_COMMAND shell right -r zsh_prompt '$add_args_2')' PS3='$($POWERLINE_COMMAND shell left -r zsh_prompt -R local_theme=select '$add_args')' fi } diff --git a/powerline/config_files/colorschemes/shell/default.json b/powerline/config_files/colorschemes/shell/default.json index a9b0742f..2efd3796 100644 --- a/powerline/config_files/colorschemes/shell/default.json +++ b/powerline/config_files/colorschemes/shell/default.json @@ -8,7 +8,8 @@ "branch": { "fg": "gray9", "bg": "gray2" }, "branch_dirty": { "fg": "brightyellow", "bg": "gray2" }, "branch_clean": { "fg": "gray9", "bg": "gray2" }, - "prompt": { "fg": "gray9", "bg": "gray4" }, + "continuation": { "fg": "gray9", "bg": "gray4" }, + "continuation:current": { "fg": "gray10", "bg": "gray4", "attr": ["bold"] }, "cwd": { "fg": "gray9", "bg": "gray4" }, "cwd:current_folder": { "fg": "gray10", "bg": "gray4", "attr": ["bold"] }, "cwd:divider": { "fg": "gray7", "bg": "gray4" }, diff --git a/powerline/config_files/themes/shell/continuation.json b/powerline/config_files/themes/shell/continuation.json index 2b4370de..e377f5b4 100644 --- a/powerline/config_files/themes/shell/continuation.json +++ b/powerline/config_files/themes/shell/continuation.json @@ -1,12 +1,9 @@ { + "default_module": "powerline.segments.shell", "segments": { "left": [ { - "type": "string", - "contents": "", - "width": "auto", - "align": "r", - "highlight_group": ["prompt"] + "name": "continuation" } ], "right": [ diff --git a/powerline/segments/shell.py b/powerline/segments/shell.py index 5e77f656..a15b5522 100644 --- a/powerline/segments/shell.py +++ b/powerline/segments/shell.py @@ -72,3 +72,48 @@ def mode(pl, segment_info, override={'vicmd': 'COMMND', 'viins': 'INSERT'}, defa # code or by somebody knowing what he is doing there is absolutely no # need in keeping translations dictionary. return mode.upper() + + +@requires_segment_info +def continuation(pl, segment_info, omit_cmdsubst=True, right_align=False, renames={}): + '''Display parser state. + + :param bool omit_cmdsubst: + Do not display cmdsubst parser state if it is the last, but not the only + one. + :param bool right_align: + Align to the right. + :param dict renames: + Rename states: ``{old_name : new_name}``. If ``new_name`` is ``None`` + then given state is not displayed. + + Highlight groups used: ``continuation``, ``continuation:current``. + ''' + if not segment_info['parser_state']: + return None + ret = [] + + for state in segment_info['parser_state'].split(): + state = renames.get(state, state) + if state: + ret.append({ + 'contents': state, + 'highlight_group': 'continuation', + 'draw_inner_divider': True, + }) + + if omit_cmdsubst and len(ret) > 1 and ret[-1]['contents'] == 'cmdsubst': + ret.pop(-1) + + if not ret: + ret.append({ + 'contents': '' + }) + + if right_align: + ret[0].update(width='auto', align='r') + ret[-1]['highlight_group'] = 'continuation:current' + else: + ret[-1].update(width='auto', align='l', highlight_group='continuation:current') + + return ret