aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@cepl.eu>2024-02-26 11:25:13 +0100
committerMatěj Cepl <mcepl@cepl.eu>2024-02-26 12:15:04 +0100
commit4c14865a45e265264e0f12d2aec826e7ff7255c7 (patch)
tree3188fb0f6981cc04b45e8fa8e9d8b5152307b14f
parentba755c79ff65097e970a121e5428d9b04f445da6 (diff)
downloadepy-readline.tar.gz
Initialize readline input history mechanism.readline
-rw-r--r--src/epy_reader/config.py7
-rw-r--r--src/epy_reader/reader.py7
2 files changed, 14 insertions, 0 deletions
diff --git a/src/epy_reader/config.py b/src/epy_reader/config.py
index db70a98..1948afd 100644
--- a/src/epy_reader/config.py
+++ b/src/epy_reader/config.py
@@ -1,6 +1,7 @@
import dataclasses
import json
import os
+import readline
import sys
from typing import Mapping, Tuple, Union
@@ -36,6 +37,12 @@ class Config(AppData):
# to build help menu text
self.keymap_user_dict = keymap_dict
+ if os.path.isdir(self.prefix):
+ self.input_history_file = os.path.join(self.prefix, 'readline_history.txt')
+ if os.path.isfile(self.input_history_file):
+ readline.read_history_file(self.input_history_file)
+ readline.set_history_length(1000)
+
@property
def filepath(self) -> str:
return os.path.join(self.prefix, "configuration.json") if self.prefix else os.devnull
diff --git a/src/epy_reader/reader.py b/src/epy_reader/reader.py
index ee615f8..310833a 100644
--- a/src/epy_reader/reader.py
+++ b/src/epy_reader/reader.py
@@ -4,6 +4,7 @@ import dataclasses
import multiprocessing
import os
import re
+import readline
import shutil
import signal
import sqlite3
@@ -135,6 +136,9 @@ class Reader:
self.tts_support: bool = bool(self._tts_speaker)
self.is_speaking: bool = False
+ # readline history
+ self.input_history_file = config.input_history_file
+
# multi process & progress percentage
self._multiprocess_support: bool = False if multiprocessing.cpu_count() == 1 else True
self._process_counting_letter: Optional[multiprocessing.Process] = None
@@ -703,6 +707,9 @@ class Reader:
def cleanup(self) -> None:
self.ebook.cleanup()
+ if self.input_history_file:
+ readline.write_history_file(self.input_history_file)
+
if isinstance(self._process_counting_letter, multiprocessing.Process):
if self._process_counting_letter.is_alive():
self._process_counting_letter.terminate()