Command line editing:

* On a GS, Control-U cancels the entire line like Control-X. (Right-arrow is Control-U, but without the Control key down.)
* On a GS, Control-K clears to end-of-line like Control-Y. (Up-arrow is Control-K, but without the Control key down.)
* Insert mode is on by default.
This commit is contained in:
Dave Lyons 2020-08-22 00:17:34 -07:00
parent 4a930a5eb0
commit 4b4b323dc1
1 changed files with 34 additions and 14 deletions

View File

@ -27,6 +27,7 @@ rc_spch:
x98: jmp (ksw)
rdchar2:
lsr ControlKeyDown
bit speech
bmi rc_spch
jmp (ksw)
@ -95,7 +96,8 @@ rc_l1: lda keyboard
jsr poll_inslot
bcs rc_l1
bcc h_key2
h_key: sta kbdstrb
h_key: jsr CaptureModifierState
sta kbdstrb
h_key2: sta theKey
pla
sta invflg
@ -104,6 +106,22 @@ h_key2: sta theKey
jsr pr_bs
lda theKey
rts
CaptureModifierState:
pha
; If running on an Apple IIgs, check the Control key in the modifiers register.
lda xc_req
and #8
beq @notGS
lda $c025 ;bit 1 (value $02) = Control down
lsr a
lsr a ; into Carry flag
ror ControlKeyDown
@notGS: pla
rts
ControlKeyDown:
.byte 0 ; bit 7 set if Control was down on last keypress
theKey: .byte 0
vcout: jmp (vid_csw)
;
@ -347,8 +365,8 @@ mygetln2:
sta exec_flag ;bit 7
ldx #0
stx longest
stx insert_mode
lda #<-1
sta insert_mode ; insert mode is on by default
sta hist_level
mg_l1: ldy longest
lda #space
@ -471,11 +489,11 @@ mgdispatch:
.addr ctrlr-1
.addr mg_err-1 ;s
.addr mg_err-1 ;t
.addr ctrlu-1
.addr ctrlu-1 ;u = right arrow
.addr mg_err-1 ;v
.addr mg_err-1 ;w
.addr ctrlx-1
.addr ctrly-1 ;y
.addr ctrly-1 ;y - erase remainder of line
.addr mg_err-1 ;z
.addr ctrlx-1 ;esc = ctrlx (for new //e kbd "clear")
.addr mg_err-1 ;ctrl-backslash
@ -513,7 +531,7 @@ tglInsert:
sta insert_mode
jmp mg_l1
;**********************
ctrly: stx xsave ;truncate cmd lin at cursor
ctrly: stx xsave ;truncate cmd line at cursor
yblanks:
jsr pr_sp
@ -578,7 +596,6 @@ f_cont: pha
jmp mgfind_l1
ctrlh: ;backspace
lsr insert_mode
cpx #0
bne bs_ok
jmp mg_err
@ -596,7 +613,6 @@ ctrli: sec
jmp mg_l1
ctrlx:
lsr insert_mode
jsr mg_can
sec
rts
@ -607,7 +623,6 @@ mg_can: jsr backx
jsr backx
ldx #0
stx longest
lsr insert_mode
rts
mgdelete:
@ -658,11 +673,14 @@ ctrlj: ;down arrow
bmi ctrlk
jmp ctrlr
ctrlk: ;up arrow
inc hist_level
ctrlk: ;up arrow or Control-K
bit ControlKeyDown
bpl :+
jmp ctrly
: inc hist_level
jmp ctrlr
ctrld: lsr insert_mode ;delete at cursor
ctrld:
cpx longest
bcc len_ok
jmp mg_err
@ -685,9 +703,11 @@ dl_back:
bne dl_back
jmp mg_l1
ctrlu:
lsr insert_mode
cpx longest
ctrlu: ; right arrow or Control-U
bit ControlKeyDown
bpl :+
jmp ctrlx
: cpx longest ; right arrow
bcc len_ok2
jmp mg_err
len_ok2: