Improved open and close apple handling on macs

This commit is contained in:
Iván Izaguirre 2024-08-31 16:43:09 +02:00
parent 0598a8a393
commit 4991feeb6f
2 changed files with 32 additions and 17 deletions

View File

@ -151,25 +151,26 @@ func sdlRun(a *izapple2.Apple2) {
var helpMessage = `
F1: Show/Hide help
Ctrl-F2: Reset
F4: Show/Hide CPU trace
F5: Fast/Normal speed
Ctrl-F5: Show speed
F6: Next screen mode
F7: Show/Hide pages
F10: Next character set
Ctrl-F10: Show/Hide character set
Shift-F10: Show/Hide alternate text
F12: Save screen snapshot
Pause: Pause the emulation
F1: Show/Hide help
Ctrl-F2: Reset
F4: Show/Hide CPU trace
F5: Fast/Normal speed
Ctrl-F5: Show speed
F6: Next screen mode
F7: Show/Hide pages
F10: Next character set
Ctrl-F10: Show/Hide character set
Shift-F10: Show/Hide alternate text
F12: Save screen snapshot
Pause: Pause the emulation
Drop a file on the left or right
side of the window to load a disk
Left alt or option key: Open-Apple
Right alt or option key: Closed-Apple
Drop a file on the left or right
side of the window to load a disk
Run izapple2 -h for more options
More info at
https://github.com/ivanizag/izapple2
`

View File

@ -1,6 +1,9 @@
package izapple2
import "unicode"
import (
"slices"
"unicode"
)
// KeyboardProvider provides a keyboard implementation
type KeyboardProvider interface {
@ -29,8 +32,19 @@ func (k *KeyboardChannel) PutText(text string) {
}
}
var macOptionChars = []rune("ı˝•£‰ ⁄‘’≈œæ€®†¥øπå∫∂ƒ™¶§∑©√ßµ„…≤≥çñŒÆ€‡∏fl¯ˇ˘‹›◊˙˚")
var macOptionSubs = []rune("!\"·$%&/()=qwertyopasdfghjkxcvbm,.<>cnQWETPGJKLZXVNM")
// PutRune sends a rune to the emulator if it is valid printable ASCII
func (k *KeyboardChannel) PutRune(ch rune) {
// Some substitutions useful for Macs that transform chars with the option key
pos := slices.Index(macOptionChars, ch)
if pos >= 0 {
println("Mac option char: ", string(ch), " -> ", string(macOptionSubs[pos]))
ch = rune(macOptionSubs[pos])
}
// We will use computed text only for printable ASCII chars
if ch >= ' ' && ch <= '~' {
if k.a.IsForceCaps() && ch >= 'a' && ch <= 'z' {