Compare commits

..

No commits in common. "e2ef7d668c6d4526ddd1e1e21e60bc0a69e99c2e" and "840b6467009222f743e3c5ac12c0eaf4090b766f" have entirely different histories.

View File

@ -692,7 +692,7 @@ let Input = {
textarea.selectionStart, textarea.selectionEnd, textarea.value] textarea.selectionStart, textarea.selectionEnd, textarea.value]
}, },
complete: (b, textarea) => { complete: textarea => {
if (textarea.selectionStart !== textarea.selectionEnd) if (textarea.selectionStart !== textarea.selectionEnd)
return false return false
@ -726,7 +726,7 @@ let Input = {
return true return true
}, },
submit: (b, textarea) => { submit: textarea => {
rpc.send({ rpc.send({
command: 'BufferInput', command: 'BufferInput',
bufferName: bufferCurrent, bufferName: bufferCurrent,
@ -736,76 +736,41 @@ let Input = {
// b.history[b.history.length] is virtual, and is represented // b.history[b.history.length] is virtual, and is represented
// either by textarea contents when it's currently being edited, // either by textarea contents when it's currently being edited,
// or by b.input in all other cases. // or by b.input in all other cases.
let b = buffers.get(bufferCurrent)
b.history.push(textarea.value) b.history.push(textarea.value)
b.historyAt = b.history.length b.historyAt = b.history.length
textarea.value = '' textarea.value = ''
return true return true
}, },
backward: (b, textarea) => { previous: textarea => {
if (textarea.selectionStart !== textarea.selectionEnd) let b = buffers.get(bufferCurrent)
if (b === undefined)
return false return false
let point = textarea.selectionStart if (b.historyAt > 0) {
if (point < 1) if (b.historyAt == b.history.length)
return false b.input = textarea.value
while (point && /\s/.test(textarea.value.charAt(--point))) {} textarea.value = b.history[--b.historyAt]
while (point-- && !/\s/.test(textarea.value.charAt(point))) {} } else {
point++ beep()
textarea.setSelectionRange(point, point) }
return true return true
}, },
forward: (b, textarea) => { next: textarea => {
if (textarea.selectionStart !== textarea.selectionEnd) let b = buffers.get(bufferCurrent)
if (b === undefined)
return false return false
let point = textarea.selectionStart, len = textarea.value.length if (b.historyAt < b.history.length) {
if (point + 1 > len) if (++b.historyAt == b.history.length)
return false textarea.value = b.input
while (point < len && /\s/.test(textarea.value.charAt(point))) point++ else
while (point < len && !/\s/.test(textarea.value.charAt(point))) point++ textarea.value = b.history[b.historyAt]
textarea.setSelectionRange(point, point) } else {
return true beep()
}, }
first: (b, textarea) => {
if (b.historyAt <= 0)
return false
if (b.historyAt == b.history.length)
b.input = textarea.value
textarea.value = b.history[(b.historyAt = 0)]
return true
},
last: (b, textarea) => {
if (b.historyAt >= b.history.length)
return false
b.historyAt = b.history.length
textarea.value = b.input
return true
},
previous: (b, textarea) => {
if (b.historyAt <= 0)
return false
if (b.historyAt == b.history.length)
b.input = textarea.value
textarea.value = b.history[--b.historyAt]
return true
},
next: (b, textarea) => {
if (b.historyAt >= b.history.length)
return false
if (++b.historyAt == b.history.length)
textarea.value = b.input
else
textarea.value = b.history[b.historyAt]
return true return true
}, },
@ -813,35 +778,28 @@ let Input = {
// TODO: And perhaps on other actions, too. // TODO: And perhaps on other actions, too.
rpc.send({command: 'Active'}) rpc.send({command: 'Active'})
let b = buffers.get(bufferCurrent)
if (b === undefined)
return
let textarea = event.currentTarget let textarea = event.currentTarget
let handled = false let handled = false
let success = true
if (hasShortcutModifiers(event)) { if (hasShortcutModifiers(event)) {
handled = true
switch (event.key) { switch (event.key) {
case 'b': success = Input.backward(b, textarea); break case 'p':
case 'f': success = Input.forward(b, textarea); break handled = Input.previous(textarea)
case '<': success = Input.first(b, textarea); break break
case '>': success = Input.last(b, textarea); break case 'n':
case 'p': success = Input.previous(b, textarea); break handled = Input.next(textarea)
case 'n': success = Input.next(b, textarea); break break
default: handled = false
} }
} else if (!event.altKey && !event.ctrlKey && !event.metaKey && } else if (!event.altKey && !event.ctrlKey && !event.metaKey &&
!event.shiftKey) { !event.shiftKey) {
handled = true
switch (event.keyCode) { switch (event.keyCode) {
case 9: success = Input.complete(b, textarea); break case 9:
case 13: success = Input.submit(b, textarea); break handled = Input.complete(textarea)
default: handled = false break
case 13:
handled = Input.submit(textarea)
break
} }
} }
if (!success)
beep()
if (handled) if (handled)
event.preventDefault() event.preventDefault()
}, },