1
0
Fork 0
mycli/mycli/packages/toolkit/fzf.py
Daniel Baumann f6ae5d2542
Merging upstream version 1.28.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-09 19:15:26 +01:00

45 lines
1.5 KiB
Python

from shutil import which
from pyfzf import FzfPrompt
from prompt_toolkit import search
from prompt_toolkit.key_binding.key_processor import KeyPressEvent
from .history import FileHistoryWithTimestamp
class Fzf(FzfPrompt):
def __init__(self):
self.executable = which("fzf")
if self.executable:
super().__init__()
def is_available(self) -> bool:
return self.executable is not None
def search_history(event: KeyPressEvent):
buffer = event.current_buffer
history = buffer.history
fzf = Fzf()
if fzf.is_available() and isinstance(history, FileHistoryWithTimestamp):
history_items_with_timestamp = history.load_history_with_timestamp()
formatted_history_items = []
original_history_items = []
for item, timestamp in history_items_with_timestamp:
formatted_item = item.replace('\n', ' ')
timestamp = timestamp.split(".")[0] if "." in timestamp else timestamp
formatted_history_items.append(f"{timestamp} {formatted_item}")
original_history_items.append(item)
result = fzf.prompt(formatted_history_items, fzf_options="--tiebreak=index")
if result:
selected_index = formatted_history_items.index(result[0])
buffer.text = original_history_items[selected_index]
buffer.cursor_position = len(buffer.text)
else:
# Fallback to default reverse incremental search
search.start_search(direction=search.SearchDirection.BACKWARD)