Commit 6b156fb8a29add9a96f582e8e231c87a517b7354
1 parent
7a3ee623
Pressing tab when typing a player name as the first word of a sentence will try to autocomplete it
Showing
1 changed file
with
31 additions
and
0 deletions
@@ -78,6 +78,8 @@ function _M:init(chat, on_end) | @@ -78,6 +78,8 @@ function _M:init(chat, on_end) | ||
78 | self.chat:setCurrentTarget(false, self.chat.last_whispers[found]) | 78 | self.chat:setCurrentTarget(false, self.chat.last_whispers[found]) |
79 | self:updateTitle(self:getTitle()) | 79 | self:updateTitle(self:getTitle()) |
80 | end | 80 | end |
81 | + else | ||
82 | + self:autoComplete() | ||
81 | end | 83 | end |
82 | end) | 84 | end) |
83 | end | 85 | end |
@@ -136,6 +138,35 @@ function _M:checkTarget(text) | @@ -136,6 +138,35 @@ function _M:checkTarget(text) | ||
136 | end | 138 | end |
137 | end | 139 | end |
138 | 140 | ||
141 | +function _M:autoComplete() | ||
142 | + local text, text_len = self.c_box.text, self.c_box.text:len() | ||
143 | + | ||
144 | + local matches = {} | ||
145 | + for k, v in pairs(self.chat.channels[self.chat.cur_channel].users) do | ||
146 | + if k:sub(1, text_len) == text then | ||
147 | + matches[#matches+1] = k | ||
148 | + end | ||
149 | + end | ||
150 | + if #matches == 1 then | ||
151 | + self.c_box:setText(matches[1]) | ||
152 | + elseif #matches > 1 then | ||
153 | + -- Find the longest common substring and complete it | ||
154 | + local substring = matches[1]:sub(#text+1) | ||
155 | + for i=2,#matches do | ||
156 | + local min_len = math.min(#matches[i]-#text, #substring) | ||
157 | + for j=1,min_len do | ||
158 | + if substring:sub(j, j) ~= matches[i]:sub(#text+j, #text+j) then | ||
159 | + substring = substring:sub(1, util.bound(j-1, 0)) | ||
160 | + break | ||
161 | + end | ||
162 | + end | ||
163 | + if #substring > 0 then | ||
164 | + self.c_box:setText(text .. substring) | ||
165 | + end | ||
166 | + end | ||
167 | + end | ||
168 | +end | ||
169 | + | ||
139 | function _M:okclick() | 170 | function _M:okclick() |
140 | local text = self.c_box.text | 171 | local text = self.c_box.text |
141 | 172 |
-
Please register or login to post a comment