mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
...
This commit is contained in:
parent
d9e5e74695
commit
30c96df505
56
src/calibre/utils/pyconsole/history.py
Normal file
56
src/calibre/utils/pyconsole/history.py
Normal file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python
|
||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
from collections import deque
|
||||
|
||||
class History(object): # {{{
|
||||
|
||||
def __init__(self, current, entries):
|
||||
self.entries = deque(entries, maxlen=max(2000, len(entries)))
|
||||
self.index = len(self.entries) - 1
|
||||
self.current = self.default = current
|
||||
self.last_was_back = False
|
||||
|
||||
def back(self, amt=1):
|
||||
if self.entries:
|
||||
oidx = self.index
|
||||
ans = self.entries[self.index]
|
||||
self.index = max(0, self.index - amt)
|
||||
self.last_was_back = self.index != oidx
|
||||
return ans
|
||||
|
||||
def forward(self, amt=1):
|
||||
if self.entries:
|
||||
d = self.index
|
||||
if self.last_was_back:
|
||||
d += 1
|
||||
if d >= len(self.entries) - 1:
|
||||
self.index = len(self.entries) - 1
|
||||
self.last_was_back = False
|
||||
return self.current
|
||||
if self.last_was_back:
|
||||
amt += 1
|
||||
self.index = min(len(self.entries)-1, self.index + amt)
|
||||
self.last_was_back = False
|
||||
return self.entries[self.index]
|
||||
|
||||
def enter(self, x):
|
||||
try:
|
||||
self.entries.remove(x)
|
||||
except ValueError:
|
||||
pass
|
||||
self.entries.append(x)
|
||||
self.index = len(self.entries) - 1
|
||||
self.current = self.default
|
||||
self.last_was_back = False
|
||||
|
||||
def serialize(self):
|
||||
return list(self.entries)
|
||||
|
||||
# }}}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user