[+] update FastSelect

1. sort buffers
    based on last access time;
This commit is contained in:
Siarhei Siniak 2025-10-15 21:21:41 +03:00
parent 8516fbfcad
commit 656464fe38

@ -42,6 +42,7 @@ class FastSelect:
)
self._buffer_frequency : dict[int, int] = dict()
self._buffer_last_used : dict[int, int] = dict()
self._queue : collections.deque[Callable[[], None]] = collections.deque()
self._lock = threading.Lock()
@ -108,7 +109,8 @@ augroup END
res_sorted = sorted(
res,
key=lambda x: -self._buffer_frequency.get(x[1], 0)
# key=lambda x: -self._buffer_frequency.get(x[1], 0)
key=lambda x: -self._buffer_last_used.get(x[1], 0)
)
self.loop.call_soon_threadsafe(
@ -197,17 +199,36 @@ augroup END
# )
def on_buf_enter(self) -> None:
result = asyncio.run_coroutine_threadsafe(
self._on_buf_enter(
buf_number=vim.current.buffer.number,
buf_name=pathlib.Path(vim.current.buffer.name),
),
self.loop
)
result.add_done_callback(future_dump_exception)
async def _on_buf_enter(
self,
buf_number: int,
buf_name: pathlib.Path,
) -> None:
# logger.info(dict(msg='waiting'))
with self._lock:
buf_number = vim.current.buffer.number
# buf_number = vim.current.buffer.number
if not buf_number in self._buffer_frequency:
self._buffer_frequency[buf_number] = 0
self._buffer_frequency[buf_number] += 1
self._buffer_last_used[buf_number] = datetime.datetime.now().timestamp()
logger.info(dict(
msg='updated',
buf_path=vim.current.buffer.name,
buf_path=str(buf_name),
frequency=self._buffer_frequency[buf_number],
buf_number=buf_number,
))