https://github.com/clipy/sauce
Mapping various keyboard layout sources and key codes in macOS. (e.g.: QWERTY, Dvorak)
https://github.com/clipy/sauce
dvorak keycode macos qwerty swift
Last synced: 5 months ago
JSON representation
Mapping various keyboard layout sources and key codes in macOS. (e.g.: QWERTY, Dvorak)
- Host: GitHub
- URL: https://github.com/clipy/sauce
- Owner: Clipy
- License: mit
- Created: 2018-07-28T18:46:25.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-09-17T18:47:24.000Z (6 months ago)
- Last Synced: 2025-09-30T19:08:11.035Z (6 months ago)
- Topics: dvorak, keycode, macos, qwerty, swift
- Language: Swift
- Homepage:
- Size: 155 KB
- Stars: 89
- Watchers: 4
- Forks: 21
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# Sauce

[](https://github.com/Clipy/Sauce/releases/latest)
[](https://github.com/Clipy/Sauce/blob/master/LICENSE)
[](https://github.com/Carthage/Carthage)
[](https://cocoapods.org/pods/Sauce)
[](https://cocoapods.org/pods/Sauce)
[](https://swift.org/package-manager)
Mapping various keyboard layout sources and key codes in macOS. (e.g.: QWERTY, Dvorak)
## Motivation
Only the ANSI-standard US keyboard is defined for the key code defined in Carbon.framework. Therefore, we can obtain only the key code of the QWERTY keyboard layout. (e.g.: `kVK_ANSI_V`)
In layout other than QWERTY, (e.g. Dvorak) the virtual key code is different.
| Keyboard Layout | Key | Key Code |
| :---------------: | :---: | :--------: |
| QWERTY | v | 9 |
| Dvorak | v | 47 |
This library is created with the purpose of mapping the key code of the input sources and making it possible to obtain the correct key code in various keyboard layouts.
## Usage
### CocoaPods
```
pod 'Sauce'
```
### Carthage
```
github "Clipy/Sauce"
```
## Example
### Key codes
Get the key code of the current input source.
```swift
let keyCode = Sauce.shared.keyCode(for: .v)
```
### Key
Get the `Key` of the current input source.
```swift
let key = Sauce.shared.key(for: keyCode)
```
### Character
Get the character of the current input source.
```swift
let character = Sauce.shared.character(for: keyCode, carbonModifiers: shiftKey)
let character = Sauce.shared.character(for: keyCode, cocoaModifiers: [.shift])
```
## Notification
### `NSNotification.Name.SauceEnabledKeyboardInputSourcesChanged`
`SauceEnabledKeyboardInputSourcesChanged` is the same as `kTISNotifyEnabledKeyboardInputSourcesChanged` in Carbon.framework
### `NSNotification.Name.SauceSelectedKeyboardInputSourceChanged`
`SauceSelectedKeyboardInputSourceChanged` is different from `kTISNotifySelectedKeyboardInputSourceChanged` and is notified only when the input source id has changed.
Since it is filtered and notified, please do not use it for the same purpose as normal `kTISNotifySelectedKeyboardInputSourceChanged`.
### `NSNotification.Name.SauceSelectedKeyboardKeyCodesChanged`
By using this Notification, can detect when the setting changes with the same keyboard layout, when the input source changes from QWERTY to Dvorak, and so on.