Skip to content

Commit

Permalink
feat: make KeyboardEnhancementsMsg helpers always return true on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
aymanbagabas committed Sep 17, 2024
1 parent 0e88b9d commit c80b0d2
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 31 deletions.
30 changes: 0 additions & 30 deletions commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package tea

import (
"time"

"github.com/charmbracelet/x/ansi"
)

// Batch performs a bunch of commands concurrently with no ordering guarantees
Expand Down Expand Up @@ -216,31 +214,3 @@ func WindowSize() Cmd {
return windowSizeMsg{}
}
}

type enableKeyboardEnhancementsMsg []KeyboardEnhancement

// EnableKeyboardEnhancements is a command that enables keyboard enhancements
// in the terminal.
func EnableKeyboardEnhancements(enhancements ...KeyboardEnhancement) Cmd {
return func() Msg {
return enableKeyboardEnhancementsMsg(append(enhancements, withDisambiguousKeys))
}
}

type disableKeyboardEnhancementsMsg struct{}

// DisableKeyboardEnhancements is a command that disables keyboard enhancements
// in the terminal.
func DisableKeyboardEnhancements() Msg {
return disableKeyboardEnhancementsMsg{}
}

// KeyboardEnhancementsMsg is a message that gets sent when the terminal
// supports keyboard enhancements.
type KeyboardEnhancementsMsg keyboardEnhancements

// SupportsReleaseKeys returns whether the terminal supports key release
// events.
func (k KeyboardEnhancementsMsg) SupportsReleaseKeys() bool {
return k.kittyFlags&ansi.KittyReportEventTypes != 0
}
48 changes: 47 additions & 1 deletion keyboard.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package tea

import "github.com/charmbracelet/x/ansi"
import (
"runtime"

"github.com/charmbracelet/x/ansi"
)

// keyboardEnhancements is a type that represents a set of keyboard
// enhancements.
Expand Down Expand Up @@ -56,3 +60,45 @@ func withDisambiguousKeys(k *keyboardEnhancements) {
k.modifyOtherKeys = 1
}
}

type enableKeyboardEnhancementsMsg []KeyboardEnhancement

// EnableKeyboardEnhancements is a command that enables keyboard enhancements
// in the terminal.
func EnableKeyboardEnhancements(enhancements ...KeyboardEnhancement) Cmd {
return func() Msg {
return enableKeyboardEnhancementsMsg(append(enhancements, withDisambiguousKeys))
}
}

type disableKeyboardEnhancementsMsg struct{}

// DisableKeyboardEnhancements is a command that disables keyboard enhancements
// in the terminal.
func DisableKeyboardEnhancements() Msg {
return disableKeyboardEnhancementsMsg{}
}

// KeyboardEnhancementsMsg is a message that gets sent when the terminal
// supports keyboard enhancements.
type KeyboardEnhancementsMsg keyboardEnhancements

// SupportsDisambiguousKeys returns whether the terminal supports reporting
// disambiguous keys as escape codes.
func (k KeyboardEnhancementsMsg) SupportsDisambiguousKeys() bool {
if runtime.GOOS == "windows" {
// We use Windows Console API which supports reporting disambiguous keys.
return true
}
return k.kittyFlags&ansi.KittyDisambiguateEscapeCodes != 0 || k.modifyOtherKeys >= 1
}

// SupportsReleaseKeys returns whether the terminal supports key release
// events.
func (k KeyboardEnhancementsMsg) SupportsReleaseKeys() bool {
if runtime.GOOS == "windows" {
// We use Windows Console API which supports key release events.
return true
}
return k.kittyFlags&ansi.KittyReportEventTypes != 0
}

0 comments on commit c80b0d2

Please sign in to comment.