mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 08:38:32 +02:00
* fix missed statement from last PR * replace print statement for adding an entry to a journal * clean up linting and format * change print statement over to new print_msg function * make print_msg always print to stderr * change print statement over to new print_msg function * update importer to use new message function * update yaml format to use new message function * code cleanup * update yaml format to use new message function * update yaml format to use new exception handling * update Journal class to use new message function * update install module to use new message function * update config module to use new message function * update upgrade module to properly use new message and exception handling * fix typo * update upgrade module to use new message handling * update welcome message to use new handling * update upgrade module to use new message handling * update upgrade module journal summaries to use new message handling * take out old code * update upgrade module to use new message handling * update upgrade module to use new message handling * update more modules to use new message handling * take out old comment * update deprecated_cmd to use new message handling * update text_exporter with new message handling, get rid of old color constants * get rid of hardcoded text * whitespace changes * rework MsgType into MsgStyle so messages can have different styles * add comment * Move around code to separate concerns of each function a bit more * update create_password and yesno prompt functions for new messaging * fix missing newline for keyboard interrupts * fix misc linting * fix bug with panel titles always showing 'error' after one error * fix missing import * update debug output after uncaught exception * update exception for new exception handling * rewrite yesno function to use new centralized messages * reduce the debug output slightly * clean up print_msgs function * clean up create_password function * clean up misc linting * rename screen_input to hide_input to be more clear * update encrypted journal prompt to use new messaging functionality * fix typo in message key * move rich console into function so we can mock properly * update password mock to use rich console instead of getpass * add more helpful output to then step * fix test by updating expected output * update message to use new functionality * rework mocks in test suite for new messaging functionality * fix linting issue * fix more tests * fix more tests * fix more tests * fix more tests * fix merge bug * update prompt_action_entries to use new messaging functionality * Add new input_method "type" This does the same thing as input_method "pipe" but is more clear what it's doing (typing text into the builtin composer) * get rid of old commented code * get rid of unused code * move some files around Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com>
92 lines
2.4 KiB
Python
92 lines
2.4 KiB
Python
# Copyright (C) 2012-2021 jrnl contributors
|
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
|
import textwrap
|
|
|
|
from typing import Union
|
|
from rich.text import Text
|
|
from rich.console import Console
|
|
|
|
from jrnl.messages import Message
|
|
from jrnl.messages import MsgStyle
|
|
from jrnl.messages import MsgText
|
|
|
|
|
|
def deprecated_cmd(old_cmd, new_cmd, callback=None, **kwargs):
|
|
print_msg(
|
|
Message(
|
|
MsgText.DeprecatedCommand,
|
|
MsgStyle.WARNING,
|
|
{"old_cmd": old_cmd, "new_cmd": new_cmd},
|
|
)
|
|
)
|
|
|
|
if callback is not None:
|
|
callback(**kwargs)
|
|
|
|
|
|
def list_journals(configuration):
|
|
from . import config
|
|
|
|
"""List the journals specified in the configuration file"""
|
|
result = f"Journals defined in config ({config.get_config_path()})\n"
|
|
ml = min(max(len(k) for k in configuration["journals"]), 20)
|
|
for journal, cfg in configuration["journals"].items():
|
|
result += " * {:{}} -> {}\n".format(
|
|
journal, ml, cfg["journal"] if isinstance(cfg, dict) else cfg
|
|
)
|
|
return result
|
|
|
|
|
|
def print_msg(msg: Message, **kwargs) -> Union[None, str]:
|
|
"""Helper function to print a single message"""
|
|
kwargs["style"] = msg.style
|
|
return print_msgs([msg], **kwargs)
|
|
|
|
|
|
def print_msgs(
|
|
msgs: list[Message],
|
|
delimiter: str = "\n",
|
|
style: MsgStyle = MsgStyle.NORMAL,
|
|
get_input: bool = False,
|
|
hide_input: bool = False,
|
|
) -> Union[None, str]:
|
|
# Same as print_msg, but for a list
|
|
text = Text("", end="")
|
|
kwargs = style.decoration.args
|
|
|
|
for i, msg in enumerate(msgs):
|
|
kwargs = _add_extra_style_args_if_needed(kwargs, msg=msg)
|
|
|
|
m = format_msg_text(msg)
|
|
|
|
if i != len(msgs) - 1:
|
|
m.append(delimiter)
|
|
|
|
text.append(m)
|
|
|
|
if style.append_space:
|
|
text.append(" ")
|
|
|
|
decorated_text = style.decoration.callback(text, **kwargs)
|
|
|
|
# Always print messages to stderr
|
|
console = _get_console(stderr=True)
|
|
|
|
if get_input:
|
|
return str(console.input(prompt=decorated_text, password=hide_input))
|
|
console.print(decorated_text, new_line_start=style.prepend_newline)
|
|
|
|
|
|
def _get_console(stderr: bool = True) -> Console:
|
|
return Console(stderr=stderr)
|
|
|
|
|
|
def _add_extra_style_args_if_needed(args, msg):
|
|
args["border_style"] = msg.style.color
|
|
args["title"] = msg.style.box_title
|
|
return args
|
|
|
|
|
|
def format_msg_text(msg: Message) -> Text:
|
|
text = textwrap.dedent(msg.text.value.format(**msg.params)).strip()
|
|
return Text(text)
|