mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 16:34:47 +01:00
reverse history commands in all backends
This commit is contained in:
parent
eda7c4b186
commit
ca2e9361e1
5 changed files with 23 additions and 17 deletions
|
@ -114,11 +114,11 @@ class History:
|
|||
"""Flush the history items to disk from a buffer."""
|
||||
pass
|
||||
|
||||
def items(self):
|
||||
def items(self, reverse=False):
|
||||
"""Get history items of current session."""
|
||||
raise NotImplementedError
|
||||
|
||||
def all_items(self):
|
||||
def all_items(self, reverse=False):
|
||||
"""Get all history items."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
|
|
@ -9,11 +9,11 @@ class DummyHistory(History):
|
|||
def append(self, cmd):
|
||||
pass
|
||||
|
||||
def items(self):
|
||||
def items(self, reverse=False):
|
||||
yield {'inp': 'dummy in action', 'ts': 1464652800, 'ind': 0}
|
||||
|
||||
def all_items(self):
|
||||
return self.items()
|
||||
def all_items(self, reverse=False):
|
||||
return self.items(reverse=reverse)
|
||||
|
||||
def info(self):
|
||||
data = collections.OrderedDict()
|
||||
|
|
|
@ -379,9 +379,13 @@ class JsonHistory(History):
|
|||
self.buffer.clear()
|
||||
return hf
|
||||
|
||||
def items(self):
|
||||
def items(self, reverse=False):
|
||||
"""Display history items of current session."""
|
||||
for item, tss in zip(self.inps, self.tss):
|
||||
if reverse:
|
||||
items = zip(reversed(self.inps), reversed(self.tss))
|
||||
else:
|
||||
items = zip(self.inps, self.tss)
|
||||
for item, tss in items:
|
||||
yield {'inp': item.rstrip(), 'ts': tss[0]}
|
||||
|
||||
def all_items(self, reverse=False, **kwargs):
|
||||
|
@ -406,6 +410,8 @@ class JsonHistory(History):
|
|||
msg = 'xonsh history file {0!r} is not valid JSON'
|
||||
print(msg.format(f), file=sys.stderr)
|
||||
continue
|
||||
if reverse:
|
||||
commands = reversed(commands)
|
||||
for c in commands:
|
||||
yield {'inp': c['inp'].rstrip(), 'ts': c['ts'][0]}
|
||||
# all items should also include session items
|
||||
|
|
|
@ -40,18 +40,18 @@ def construct_history(**kwargs):
|
|||
return kls_history(**kwargs)
|
||||
|
||||
|
||||
def _xh_session_parser(hist=None, **kwargs):
|
||||
def _xh_session_parser(hist=None, reverse=False, **kwargs):
|
||||
"""Returns history items of current session."""
|
||||
if hist is None:
|
||||
hist = builtins.__xonsh_history__
|
||||
return hist.items()
|
||||
return hist.items(reverse=reverse)
|
||||
|
||||
|
||||
def _xh_all_parser(hist=None, **kwargs):
|
||||
def _xh_all_parser(hist=None, reverse=False, **kwargs):
|
||||
"""Returns all history items."""
|
||||
if hist is None:
|
||||
hist = builtins.__xonsh_history__
|
||||
return hist.all_items()
|
||||
return hist.all_items(reverse=reverse)
|
||||
|
||||
|
||||
def _xh_find_histfile_var(file_list, default=None):
|
||||
|
|
|
@ -121,11 +121,11 @@ def xh_sqlite_get_count(sessionid=None, filename=None):
|
|||
return _xh_sqlite_get_count(c, sessionid=sessionid)
|
||||
|
||||
|
||||
def xh_sqlite_items(sessionid=None, filename=None):
|
||||
def xh_sqlite_items(sessionid=None, filename=None, reverse=False):
|
||||
with _xh_sqlite_get_conn(filename=filename) as conn:
|
||||
c = conn.cursor()
|
||||
_xh_sqlite_create_history_table(c)
|
||||
return _xh_sqlite_get_records(c, sessionid=sessionid)
|
||||
return _xh_sqlite_get_records(c, sessionid=sessionid, reverse=reverse)
|
||||
|
||||
|
||||
def xh_sqlite_delete_items(size_to_keep, filename=None):
|
||||
|
@ -208,15 +208,15 @@ class SqliteHistory(History):
|
|||
cmd, str(self.sessionid), store_stdout,
|
||||
filename=self.filename)
|
||||
|
||||
def all_items(self):
|
||||
def all_items(self, reverse=False):
|
||||
"""Display all history items."""
|
||||
for item in xh_sqlite_items(filename=self.filename):
|
||||
for item in xh_sqlite_items(filename=self.filename, reverse=reverse):
|
||||
yield {'inp': item[0], 'ts': item[1], 'rtn': item[2]}
|
||||
|
||||
def items(self):
|
||||
def items(self, reverse=False):
|
||||
"""Display history items of current session."""
|
||||
for item in xh_sqlite_items(
|
||||
sessionid=str(self.sessionid), filename=self.filename):
|
||||
sessionid=str(self.sessionid), filename=self.filename, reverse=reverse):
|
||||
yield {'inp': item[0], 'ts': item[1], 'rtn': item[2]}
|
||||
|
||||
def info(self):
|
||||
|
|
Loading…
Add table
Reference in a new issue