Skip to content

Commit

Permalink
Improved open and close apple handling on macs
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanizag committed Aug 31, 2024
1 parent 0598a8a commit 4991fee
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 18 deletions.
35 changes: 18 additions & 17 deletions frontend/a2sdl/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Drop a file on the left or right
side of the window to load a disk
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
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
`

Expand Down
16 changes: 15 additions & 1 deletion keyboard.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package izapple2

import "unicode"
import (
"slices"
"unicode"
)

// KeyboardProvider provides a keyboard implementation
type KeyboardProvider interface {
Expand Down Expand Up @@ -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' {
Expand Down

0 comments on commit 4991fee

Please sign in to comment.