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 = ` var helpMessage = `
F1: Show/Hide help F1: Show/Hide help
Ctrl-F2: Reset Ctrl-F2: Reset
F4: Show/Hide CPU trace F4: Show/Hide CPU trace
F5: Fast/Normal speed F5: Fast/Normal speed
Ctrl-F5: Show speed Ctrl-F5: Show speed
F6: Next screen mode F6: Next screen mode
F7: Show/Hide pages F7: Show/Hide pages
F10: Next character set F10: Next character set
Ctrl-F10: Show/Hide character set Ctrl-F10: Show/Hide character set
Shift-F10: Show/Hide alternate text Shift-F10: Show/Hide alternate text
F12: Save screen snapshot F12: Save screen snapshot
Pause: Pause the emulation Pause: Pause the emulation
Drop a file on the left or right Left alt or option key: Open-Apple
side of the window to load a disk 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 Run izapple2 -h for more options
More info at
https://github.com/ivanizag/izapple2 https://github.com/ivanizag/izapple2
` `

View File

@ -1,6 +1,9 @@
package izapple2 package izapple2
import "unicode" import (
"slices"
"unicode"
)
// KeyboardProvider provides a keyboard implementation // KeyboardProvider provides a keyboard implementation
type KeyboardProvider interface { 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 // PutRune sends a rune to the emulator if it is valid printable ASCII
func (k *KeyboardChannel) PutRune(ch rune) { 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 // We will use computed text only for printable ASCII chars
if ch >= ' ' && ch <= '~' { if ch >= ' ' && ch <= '~' {
if k.a.IsForceCaps() && ch >= 'a' && ch <= 'z' { if k.a.IsForceCaps() && ch >= 'a' && ch <= 'z' {