Skip to content

Commit

Permalink
After JLine has trimmed history history-search-backward widget does n…
Browse files Browse the repository at this point in the history
…ot work well, fixes #643
  • Loading branch information
mattirn committed Jan 24, 2021
1 parent 91d2e33 commit 913862f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
Expand Up @@ -257,20 +257,20 @@ protected void trimHistory(Path path, int max) throws IOException {
});
}
// Remove duplicates
doTrimHistory(allItems, max);
List<Entry> trimmedItems = doTrimHistory(allItems, max);
// Write history
Path temp = Files.createTempFile(path.toAbsolutePath().getParent(), path.getFileName().toString(), ".tmp");
try (BufferedWriter writer = Files.newBufferedWriter(temp, StandardOpenOption.WRITE)) {
for (Entry entry : allItems) {
for (Entry entry : trimmedItems) {
writer.append(format(entry));
}
}
Files.move(temp, path, StandardCopyOption.REPLACE_EXISTING);
// Keep items in memory
if (isLineReaderHistory(path)) {
internalClear();
offset = allItems.get(0).index();
items.addAll(allItems);
offset = trimmedItems.get(0).index();
items.addAll(trimmedItems);
setHistoryFileData(path, new HistoryFileData(items.size(), items.size()));
} else {
setEntriesInFile(path, allItems.size());
Expand All @@ -296,7 +296,7 @@ private void internalClear() {
items.clear();
}

static void doTrimHistory(List<Entry> allItems, int max) {
static List<Entry> doTrimHistory(List<Entry> allItems, int max) {
int idx = 0;
while (idx < allItems.size()) {
int ridx = allItems.size() - idx - 1;
Expand All @@ -313,6 +313,12 @@ static void doTrimHistory(List<Entry> allItems, int max) {
while (allItems.size() > max) {
allItems.remove(0);
}
int index = allItems.get(allItems.size() - 1).index() - allItems.size() + 1;
List<Entry> out = new ArrayList<>();
for (Entry e : allItems) {
out.add(new EntryImpl(index++, e.time(), e.line()));
}
return out;
}

public int size() {
Expand Down
Expand Up @@ -141,10 +141,10 @@ public void testTrim() {
entries.add(new DefaultHistory.EntryImpl(8, Instant.now(), "a"));

List<History.Entry> trimmed = new ArrayList<>(entries);
DefaultHistory.doTrimHistory(trimmed, 6);
trimmed = DefaultHistory.doTrimHistory(trimmed, 6);
assertEquals(5, trimmed.size());

DefaultHistory.doTrimHistory(trimmed, 3);
trimmed = DefaultHistory.doTrimHistory(trimmed, 3);
assertEquals(3, trimmed.size());
assertEquals("c", trimmed.get(0).line());
assertEquals("b", trimmed.get(1).line());
Expand Down

0 comments on commit 913862f

Please sign in to comment.