Persistent history and tab completion (from the history) support.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@669 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#
|
||||
# $Id: history.py,v 1.1 2002/03/17 21:25:20 mdb Exp $
|
||||
#
|
||||
# lookuplet - a utility for quickly looking up information
|
||||
# Copyright (C) 2001 Michael Bayne
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import gnome.config
|
||||
|
||||
class History:
|
||||
"Used to persistently maintain a history of entries for the \
|
||||
lookuplet query text field."
|
||||
|
||||
# the maximum history size
|
||||
HISTORY_SIZE = 10;
|
||||
|
||||
# the actual history entries
|
||||
history = [];
|
||||
|
||||
#
|
||||
# Loads up the history from persistent preferences and prepares for
|
||||
# operation.
|
||||
#
|
||||
def __init__ (self):
|
||||
gnome.config.push_prefix("/lookuplet/");
|
||||
count = gnome.config.get_int("lookuplet/history/count");
|
||||
for h in range(0, count):
|
||||
self.history.append(gnome.config.get_string(
|
||||
"lookuplet/history/entry_%.2u" % h));
|
||||
# print "loaded %d: %s" % (h, self.history[h]);
|
||||
gnome.config.pop_prefix();
|
||||
return;
|
||||
|
||||
#
|
||||
# Adds an entry to the history.
|
||||
#
|
||||
def append (self, entry):
|
||||
# if this entry is already in the history list, we simply want to
|
||||
# move it to the end
|
||||
if (entry in self.history):
|
||||
self.history.remove(entry);
|
||||
|
||||
# add our entry
|
||||
self.history.append(entry);
|
||||
|
||||
# trim the history if it's too big
|
||||
if (len(self.history) > self.HISTORY_SIZE):
|
||||
self.history.pop(0);
|
||||
|
||||
# flush our config to the configuration repository
|
||||
gnome.config.push_prefix("/lookuplet/");
|
||||
count = len(self.history);
|
||||
gnome.config.set_int("lookuplet/history/count", count);
|
||||
for h in range(0, count):
|
||||
gnome.config.set_string(
|
||||
"lookuplet/history/entry_%.2u" % h, self.history[h]);
|
||||
# print "wrote %d: %s" % (h, self.history[h]);
|
||||
gnome.config.sync();
|
||||
gnome.config.drop_all();
|
||||
gnome.config.pop_prefix();
|
||||
|
||||
#
|
||||
# Scans back from one before the specified index looking for a history
|
||||
# entry that matches the specified prefix, returning its index if one
|
||||
# is found or -1 if one is not.
|
||||
#
|
||||
def match (self, prefix, index):
|
||||
count = len(self.history);
|
||||
for offset in range(1, count+1):
|
||||
# do some funny math to always ensure a positive value
|
||||
pos = (index - offset + count) % count;
|
||||
# print "scanning %s for %s." % (self.history[pos], prefix);
|
||||
if (self.history[pos].find(prefix) == 0):
|
||||
# print "found it at %d." % pos;
|
||||
return pos;
|
||||
# print "didn't find it.";
|
||||
return -1;
|
||||
Reference in New Issue
Block a user