[louizatakk] better bash completion. Fixes #5353
This commit is contained in:
		
							parent
							
								
									31d2bcbe7d
								
							
						
					
					
						commit
						90fd7f6e68
					
				
					 1 changed files with 32 additions and 18 deletions
				
			
		|  | @ -1813,8 +1813,8 @@ class GroupchatControl(ChatControlBase): | |||
| 			if gc_refer_to_nick_char and begin.endswith(gc_refer_to_nick_char): | ||||
| 				with_refer_to_nick_char = True | ||||
| 			if len(self.nick_hits) and self.last_key_tabs and \ | ||||
| 			(text[:-1].endswith(self.nick_hits[0]) or \ | ||||
| 			text[:-2].endswith(self.nick_hits[0])): # we should cycle | ||||
| 			text[:-len(gc_refer_to_nick_char + ' ')].endswith(self.nick_hits[0]): | ||||
| 				# we should cycle | ||||
| 				# Previous nick in list may had a space inside, so we check text and | ||||
| 				# not splitted_text and store it into 'begin' var | ||||
| 				self.nick_hits.append(self.nick_hits[0]) | ||||
|  | @ -1844,34 +1844,48 @@ class GroupchatControl(ChatControlBase): | |||
| 				else: | ||||
| 					add = ' ' | ||||
| 				start_iter = end_iter.copy() | ||||
| 				if self.last_key_tabs and with_refer_to_nick_char: | ||||
| 				if self.last_key_tabs and with_refer_to_nick_char or \ | ||||
| 				text[-1] == ' ': | ||||
| 					# have to accomodate for the added space from last | ||||
| 					# completion | ||||
| 					start_iter.backward_chars(len(begin) + 2) | ||||
| 				elif self.last_key_tabs and not gajim.config.get('shell_like_completion'): | ||||
| 					# gc_refer_to_nick_char may be more than one char! | ||||
| 					start_iter.backward_chars(len(begin) + len(add)) | ||||
| 				elif self.last_key_tabs and not gajim.config.get( | ||||
| 				'shell_like_completion'): | ||||
| 					# have to accomodate for the added space from last | ||||
| 					# completion | ||||
| 					start_iter.backward_chars(len(begin) + 1) | ||||
| 					start_iter.backward_chars(len(begin) + \ | ||||
| 						len(gc_refer_to_nick_char)) | ||||
| 				else: | ||||
| 					start_iter.backward_chars(len(begin)) | ||||
| 
 | ||||
| 				message_buffer.delete(start_iter, end_iter) | ||||
| 				completion = self.nick_hits[0] | ||||
| 				# get a shell-like completion | ||||
| 				# if there's more than one nick for this completion, complete only | ||||
| 				# the part that all these nicks have in common | ||||
| 				if gajim.config.get('shell_like_completion') and \ | ||||
| 				len(self.nick_hits) > 1: | ||||
| 					end = False | ||||
| 					cur = '' | ||||
| 					while not end: | ||||
| 						cur = self.nick_hits[0][:len(cur)+1] | ||||
| 						for nick in self.nick_hits: | ||||
| 							if cur.lower() not in nick.lower(): | ||||
| 								end = True | ||||
| 					cur = cur[:-1] | ||||
| 					completion = cur | ||||
| 					completion = '' | ||||
| 					add = "" # if nick is not complete, don't add anything | ||||
| 					while not end and len(completion) < len(self.nick_hits[0]): | ||||
| 						completion = self.nick_hits[0][:len(completion)+1] | ||||
| 						for nick in self.nick_hits: | ||||
| 							if completion.lower() not in nick.lower(): | ||||
| 								end = True | ||||
| 								completion = completion[:-1] | ||||
| 								break | ||||
| 					# if the current nick matches a COMPLETE existing nick, | ||||
| 					# and if the user tab TWICE, complete that nick (with the "add") | ||||
| 					if self.last_key_tabs: | ||||
| 						for nick in self.nick_hits: | ||||
| 							if nick == completion: | ||||
| 							# The user seems to want this nick, so | ||||
| 							# complete it as if it were the only nick | ||||
| 							# available | ||||
| 								add = gc_refer_to_nick_char + ' ' | ||||
| 				else: | ||||
| 					completion = self.nick_hits[0] | ||||
| 				message_buffer.insert_at_cursor(completion + add) | ||||
| 				self.last_key_tabs = True | ||||
| 				return True | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue