A pretty long wrapper for a :py:func:`print` function.
    But this :py:func:`print` is the only one in Photon.

    .. note:: |use_photon_m|

    :param msg:
        The message to show
    :param state:
        The message will be prefixed with [`state`]

        * If ``False`` (default): Prefixed with ~

        * If ``None``: Prefixed with [WARNING]

        * If ``True``: Prefixed with [FATAL] and the exitcode \
        will be set (see below)

    :param more:
        Something to add to the message (see below)

        * Anything you have. Just for further information.

        * Will be displayed after the message, \
        pretty printed using :py:func:`pprint.pformat`

    :param exitcode:
        |appteardown| with given code
    :param verbose:
        Show message or not (see below)

        * If set to ``False``, you can use :func:`shell_notify` \
        for the dictionary it returns.

        * Will be overruled if `exitcode` is set.

    :returns:
        A dictionary containing untouched `msg`, `more` and `verbose`

def shell_notify(msg, state=False, more=None, exitcode=None, verbose=True):
    '''
    A pretty long wrapper for a :py:func:`print` function.
    But this :py:func:`print` is the only one in Photon.

    .. note:: |use_photon_m|

    :param msg:
        The message to show
    :param state:
        The message will be prefixed with [`state`]

        * If ``False`` (default): Prefixed with ~

        * If ``None``: Prefixed with [WARNING]

        * If ``True``: Prefixed with [FATAL] and the exitcode \
        will be set (see below)

    :param more:
        Something to add to the message (see below)

        * Anything you have. Just for further information.

        * Will be displayed after the message, \
        pretty printed using :py:func:`pprint.pformat`

    :param exitcode:
        |appteardown| with given code
    :param verbose:
        Show message or not (see below)

        * If set to ``False``, you can use :func:`shell_notify` \
        for the dictionary it returns.

        * Will be overruled if `exitcode` is set.

    :returns:
        A dictionary containing untouched `msg`, `more` and `verbose`
    '''

    if state is True:
        state = '[FATAL]'
        exitcode = 23
    elif state is None:
        state = '[WARNING]'
    elif state is False:
        state = '~'
    else:
        state = '[%s]' % (str(state))
    m = ' %s %s' % (state, str(msg))
    if more:
        m += '\n\t' + _pformat(more).replace('\n', '\n\t')
    if verbose or isinstance(exitcode, int):
        print(m)
    if isinstance(exitcode, int):
        _exit(exitcode)
    return dict(message=msg, more=more, verbose=verbose)