|
@@ -25,11 +25,12 @@ package com.dmdirc.addons.tabcompletion_bash;
|
25
|
25
|
import com.dmdirc.FrameContainer;
|
26
|
26
|
import com.dmdirc.ui.input.AdditionalTabTargets;
|
27
|
27
|
import com.dmdirc.ui.input.TabCompleter;
|
28
|
|
-import com.dmdirc.ui.input.TabCompleterResult;
|
|
28
|
+import com.dmdirc.ui.input.TabCompletionMatches;
|
29
|
29
|
import com.dmdirc.ui.input.tabstyles.TabCompletionResult;
|
30
|
30
|
import com.dmdirc.ui.input.tabstyles.TabCompletionStyle;
|
31
|
31
|
|
32
|
32
|
import java.awt.Toolkit;
|
|
33
|
+import java.util.Locale;
|
33
|
34
|
|
34
|
35
|
public class BashStyle implements TabCompletionStyle {
|
35
|
36
|
|
|
@@ -60,7 +61,7 @@ public class BashStyle implements TabCompletionStyle {
|
60
|
61
|
final int end, final boolean shiftPressed,
|
61
|
62
|
final AdditionalTabTargets additional) {
|
62
|
63
|
final String word = original.substring(start, end);
|
63
|
|
- final TabCompleterResult res = tabCompleter.complete(word, additional);
|
|
64
|
+ final TabCompletionMatches res = tabCompleter.complete(word, additional);
|
64
|
65
|
|
65
|
66
|
if (start == lastPosition && word.equals(lastWord)) {
|
66
|
67
|
tabCount++;
|
|
@@ -85,7 +86,7 @@ public class BashStyle implements TabCompletionStyle {
|
85
|
86
|
} else {
|
86
|
87
|
// Multiple results
|
87
|
88
|
|
88
|
|
- final String sub = res.getBestSubstring();
|
|
89
|
+ final String sub = getBestSubstring(res);
|
89
|
90
|
if (sub.equalsIgnoreCase(word) && tabCount >= 2) {
|
90
|
91
|
window.addLine("tabCompletion", res.toString());
|
91
|
92
|
|
|
@@ -98,4 +99,34 @@ public class BashStyle implements TabCompletionStyle {
|
98
|
99
|
}
|
99
|
100
|
}
|
100
|
101
|
|
|
102
|
+ /**
|
|
103
|
+ * Returns the longest substring that matches all results.
|
|
104
|
+ *
|
|
105
|
+ * @return longest possible substring matching all results
|
|
106
|
+ */
|
|
107
|
+ private String getBestSubstring(final TabCompletionMatches res) {
|
|
108
|
+ if (res.getResultCount() == 0) {
|
|
109
|
+ return "";
|
|
110
|
+ }
|
|
111
|
+
|
|
112
|
+ final boolean caseSensitive = window.getConfigManager()
|
|
113
|
+ .getOptionBool("tabcompletion", "casesensitive");
|
|
114
|
+
|
|
115
|
+ String substring = res.getResults().get(0);
|
|
116
|
+ for (String entry : res.getResults()) {
|
|
117
|
+ if (caseSensitive) {
|
|
118
|
+ while (!entry.startsWith(substring)) {
|
|
119
|
+ substring = substring.substring(0, substring.length() - 1);
|
|
120
|
+ }
|
|
121
|
+ } else {
|
|
122
|
+ while (!entry.toLowerCase(Locale.getDefault()).startsWith(
|
|
123
|
+ substring.toLowerCase(Locale.getDefault()))) {
|
|
124
|
+ substring = substring.substring(0, substring.length() - 1);
|
|
125
|
+ }
|
|
126
|
+ }
|
|
127
|
+ }
|
|
128
|
+
|
|
129
|
+ return substring;
|
|
130
|
+ }
|
|
131
|
+
|
101
|
132
|
}
|