mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-14 10:18:31 +02:00
* Remove search mode conditional that added explicit tag search behavior * Fix failing change-time test by using same method signature as base journal class * Fix user input mock - was not appropriately checking return value * Clean up controller - streamline `run` function in `controller.py` - add debug logging - fix unnecessary import of Journal class (only needed for typing) - standardize summary display across different actions * Add currently-failing test conditions for count messages when changing time and deleting * Don't show summary if no entries found and prevent extra line break when no entries found by short-circuiting display method * Track found entry count and remove incorrect modified stat logic * Track journal entry deletion consistently * Remove unneeded exception when editor is empty and fix test that was testing incorrect message * Correct entry edit modified count test * Track modification of entries with --change-time * Preserve existing behavior when editor is empty but make the message more clear * Reconcile tests with new error message when clearing editor in edit mode * Add found/modified counts to edit tests * Add tests for found count with -n equivalent argument * Test combinations of found/deleted messages when using --delete * Add tests for counting combinations of action arguments (change-time, edit, delete) and for change-time counts. Some are failing and should be investigated * Remove extraneous comment in test * Track added/deleted counts in a register in the Journal class instead of attempting to infer it via controller counting * Add encrypted to more tests * Fix merge conflict typo * Change 'write mode' -> 'append mode' in more places --------- Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com>
75 lines
2 KiB
Python
75 lines
2 KiB
Python
# Copyright © 2012-2023 jrnl contributors
|
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
import logging
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
from jrnl.exception import JrnlException
|
|
from jrnl.messages import Message
|
|
from jrnl.messages import MsgStyle
|
|
from jrnl.messages import MsgText
|
|
from jrnl.os_compat import on_windows
|
|
from jrnl.os_compat import split_args
|
|
from jrnl.output import print_msg
|
|
|
|
|
|
def get_text_from_editor(config: dict, template: str = "") -> str:
|
|
suffix = ".jrnl"
|
|
if config["template"]:
|
|
template_filename = Path(config["template"]).name
|
|
suffix = "-" + template_filename
|
|
filehandle, tmpfile = tempfile.mkstemp(prefix="jrnl", text=True, suffix=suffix)
|
|
os.close(filehandle)
|
|
|
|
with open(tmpfile, "w", encoding="utf-8") as f:
|
|
if template:
|
|
f.write(template)
|
|
|
|
try:
|
|
subprocess.call(split_args(config["editor"]) + [tmpfile])
|
|
except FileNotFoundError:
|
|
raise JrnlException(
|
|
Message(
|
|
MsgText.EditorMisconfigured,
|
|
MsgStyle.ERROR,
|
|
{"editor_key": config["editor"]},
|
|
)
|
|
)
|
|
|
|
with open(tmpfile, "r", encoding="utf-8") as f:
|
|
raw = f.read()
|
|
os.remove(tmpfile)
|
|
|
|
if not raw:
|
|
raise JrnlException(Message(MsgText.NoTextReceived, MsgStyle.NORMAL))
|
|
|
|
return raw
|
|
|
|
|
|
def get_text_from_stdin() -> str:
|
|
print_msg(
|
|
Message(
|
|
MsgText.WritingEntryStart,
|
|
MsgStyle.TITLE,
|
|
{
|
|
"how_to_quit": MsgText.HowToQuitWindows
|
|
if on_windows()
|
|
else MsgText.HowToQuitLinux
|
|
},
|
|
)
|
|
)
|
|
|
|
try:
|
|
raw = sys.stdin.read()
|
|
except KeyboardInterrupt:
|
|
logging.error("Append mode: keyboard interrupt")
|
|
raise JrnlException(
|
|
Message(MsgText.KeyboardInterruptMsg, MsgStyle.ERROR_ON_NEW_LINE),
|
|
Message(MsgText.JournalNotSaved, MsgStyle.WARNING),
|
|
)
|
|
|
|
return raw
|