xP: fix non-ASCII text completion
This commit is contained in:
		@@ -129,6 +129,9 @@ class RelayRpc extends EventTarget {
 | 
			
		||||
 | 
			
		||||
// ---- Utilities --------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
function utf8Encode(s) { return new TextEncoder().encode(s) }
 | 
			
		||||
function utf8Decode(s) { return new TextDecoder().decode(s) }
 | 
			
		||||
 | 
			
		||||
// On macOS, the Alt/Option key transforms characters, which basically breaks
 | 
			
		||||
// all event.altKey shortcuts, so require combining them with Control as well
 | 
			
		||||
// on that system.
 | 
			
		||||
@@ -598,15 +601,22 @@ let Input = {
 | 
			
		||||
			command: 'BufferComplete',
 | 
			
		||||
			bufferName: bufferCurrent,
 | 
			
		||||
			text: textarea.value,
 | 
			
		||||
			position: textarea.selectionEnd,
 | 
			
		||||
			position: utf8Encode(
 | 
			
		||||
				textarea.value.slice(0, textarea.selectionEnd)).length,
 | 
			
		||||
		}).then(resp => {
 | 
			
		||||
			if (!Input.stamp(textarea).every((v, k) => v === state[k]))
 | 
			
		||||
				return
 | 
			
		||||
 | 
			
		||||
			let preceding = utf8Encode(textarea.value).slice(0, resp.start)
 | 
			
		||||
			let start = utf8Decode(preceding).length
 | 
			
		||||
 | 
			
		||||
			// TODO: Somehow display remaining options, or cycle through.
 | 
			
		||||
			if (resp.completions.length)
 | 
			
		||||
			if (resp.completions.length) {
 | 
			
		||||
				textarea.setRangeText(resp.completions[0],
 | 
			
		||||
					resp.start, textarea.selectionEnd, 'end')
 | 
			
		||||
					start, textarea.selectionEnd, 'end')
 | 
			
		||||
			} else {
 | 
			
		||||
				beep()
 | 
			
		||||
			}
 | 
			
		||||
			if (resp.completions.length === 1)
 | 
			
		||||
				textarea.setRangeText(' ',
 | 
			
		||||
					textarea.selectionStart, textarea.selectionEnd, 'end')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user