Source code for powerline.segments.shell

# vim:fileencoding=utf-8:noet

from powerline.theme import requires_segment_info


@requires_segment_info
[docs]def jobnum(pl, segment_info, show_zero=False): '''Return the number of jobs. :param bool show_zero: If False (default) shows nothing if there are no jobs. Otherwise shows zero for no jobs. ''' jobnum = segment_info['args'].jobnum if jobnum is None or (not show_zero and jobnum == 0): return None else: return str(jobnum)
@requires_segment_info
[docs]def last_status(pl, segment_info): '''Return last exit code. Highlight groups used: ``exit_fail`` ''' if not segment_info['args'].last_exit_code: return None return [{'contents': str(segment_info['args'].last_exit_code), 'highlight_group': 'exit_fail'}]
@requires_segment_info
[docs]def last_pipe_status(pl, segment_info): '''Return last pipe status. Highlight groups used: ``exit_fail``, ``exit_success`` ''' last_pipe_status = segment_info['args'].last_pipe_status if any(last_pipe_status): return [{'contents': str(status), 'highlight_group': 'exit_fail' if status else 'exit_success', 'draw_inner_divider': True} for status in last_pipe_status] else: return None
@requires_segment_info
[docs]def mode(pl, segment_info, override={'vicmd': 'COMMND', 'viins': 'INSERT'}, default=None): '''Return the current mode. :param dict override: dict for overriding mode strings. :param str default: If current mode is equal to this string then this segment will not get displayed. If not specified the value is taken from ``$POWERLINE_DEFAULT_MODE`` variable. This variable is set by zsh bindings for any mode that does not start from ``vi``. ''' mode = segment_info['mode'] if not mode: pl.debug('No or empty _POWERLINE_MODE variable') return None default = default or segment_info['environ'].get('_POWERLINE_DEFAULT_MODE') if mode == default: return None try: return override[mode] except KeyError: # Note: with zsh line editor you can emulate as much modes as you wish. # Thus having unknown mode is not an error: maybe just some developer # added support for his own zle widgets. As there is no built-in mode() # function like in VimL and _POWERLINE_MODE is likely be defined by our # code or by somebody knowing what he is doing there is absolutely no # need in keeping translations dictionary. return mode.upper()
@requires_segment_info
[docs]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 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.get('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 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