
Security News
Software Engineering Daily Podcast: Feross on AI, Open Source, and Supply Chain Risk
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.
language-fixer
Advanced tools
A flexible macOS utility that retroactively fixes text typed in the wrong keyboard layout with support for multiple languages
A flexible macOS utility that retroactively fixes text typed in the wrong keyboard layout. Supports multiple language pairs with configurable hotkeys.
https://github.com/user-attachments/assets/8c7ab90d-cf3f-4473-849a-c14cefea8278
pipx is the cleanest way to install Python CLI tools:
# Install pipx if you don't have it
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# Close and reopen your terminal, then:
pipx install language-fixer
# Initialize configuration
lang-fix init
# Install as background service
lang-fix service install
pip3 install language-fixer
# Initialize configuration
lang-fix init
# Install as background service
lang-fix service install
Note: If you use pip, you may need to add Python's bin directory to your PATH:
export PATH="$HOME/Library/Python/3.9/bin:$PATH"
Add this to your ~/.zshrc or ~/.bash_profile to make it permanent.
macOS requires TWO permissions for the keyboard listener to work.
First, find the exact Python path to grant permissions to:
lang-fix doctor
This shows the exact Python executable path (e.g., /opt/homebrew/bin/python3 for pipx installations).
Then grant permissions:
1. Input Monitoring (will prompt automatically when first run)
lang-fix doctor2. Accessibility (must enable manually)
After granting both permissions, restart the service:
lang-fix service restart
Troubleshooting: If conversion doesn't work, run lang-fix doctor to verify the correct Python path is granted permissions.
Clone the repository:
git clone https://github.com/yourusername/language-fixer.git
cd language-fixer
Install with uv:
uv sync
Grant accessibility permissions (same as above)
Install as service (optional):
./scripts/install.sh
After installation, initialize the configuration:
lang-fix init
This creates config and mappings in ~/.config/language-fixer/ with Hebrew-English support by default.
Then install as a service:
lang-fix service install
Grant permissions (see Permissions section above), restart, and you're done!
lang-fix service restart
Type in the wrong language and press Cmd+Option+H to fix!
Language Fixer provides both lang-fix (short) and language-fixer (long) commands:
# Initialize configuration (first time setup)
lang-fix init
# Diagnose installation and show permission instructions
lang-fix doctor
# View available mappings
lang-fix mapping list
# Create custom language mapping
lang-fix mapping create
# View config file
lang-fix config
# Edit config file
lang-fix config --edit
# Show config file path
lang-fix config --path
# Install as background service
lang-fix service install
# Check service status
lang-fix service status
# Restart service (after config changes or granting permissions)
lang-fix service restart
# Stop service
lang-fix service stop
# Uninstall service
lang-fix service uninstall
# Run in foreground (for testing)
lang-fix run
Language Fixer stores configuration in ~/.config/language-fixer/:
config.yaml - Main configuration filemappings/ - Language mapping filesAfter running lang-fix init, you get Hebrew-English support:
buffer_timeout: 10.0
language_pairs:
- name: "Hebrew-English"
mapping_file: "~/.config/language-fixer/mappings/hebrew-english.json"
hotkey: "cmd+alt+h"
enabled: true
Edit ~/.config/language-fixer/config.yaml:
buffer_timeout: 10.0
language_pairs:
- name: "Hebrew-English"
mapping_file: "~/.config/language-fixer/mappings/hebrew-english.json"
hotkey: "cmd+alt+h"
enabled: true
- name: "Arabic-English"
mapping_file: "~/.config/language-fixer/mappings/arabic-english.json"
hotkey: "cmd+alt+a"
enabled: true
- name: "Russian-English"
mapping_file: "~/.config/language-fixer/mappings/russian-english.json"
hotkey: "cmd+alt+r"
enabled: true
lang-fix mapping create
This will:
~/.config/language-fixer/mappings/your-language.jsonAll languages work exactly the same way!
akuo (meant to type שלום)Cmd+Option+Hשלוםhello → Press Cmd+Option+H → Converts to: יקךךםCmd+Option+H again (immediately) → Reverts to: helloWith config enabled for multiple languages:
Cmd+Option+H for Hebrew-EnglishCmd+Option+A for Arabic-EnglishCmd+Option+R for Russian-EnglishIf you need to troubleshoot:
# View error logs
tail -f /tmp/languagefixer.err
# View output logs
tail -f /tmp/languagefixer.out
Language Fixer monitors your keyboard input and maintains a buffer of recently typed characters. When you press a hotkey:
The conversion is based on physical keyboard positions, so each key maps to its equivalent character in the other language.
For pipx installation:
lang-fix service uninstall
pipx uninstall language-fixer
For pip installation:
lang-fix service uninstall
pip3 uninstall language-fixer
Remove configuration (optional):
rm -rf ~/.config/language-fixer
uv run pytest
language-fixer/
├── src/language_fixer/
│ ├── __init__.py
│ ├── cli.py # Main CLI interface
│ ├── config.py # Configuration management
│ ├── converter.py # Text conversion logic
│ ├── listener.py # Keyboard listener
│ ├── generate_mapping.py # Mapping generator tool
│ └── install_service.py # Service installation
├── mappings/
│ ├── hebrew-english.json
│ ├── arabic-english.json
│ └── russian-english.json
├── tests/
│ ├── test_converter.py
│ └── test_listener.py
├── scripts/ # Legacy scripts for source installation
├── pyproject.toml
└── README.md
MIT License - see LICENSE file for details
The hotkey doesn't work:
Text isn't converting correctly:
Service won't start:
cat /tmp/languagefixer.err~/Library/LaunchAgents/com.languagefixer.plist are correctConfig file errors:
uv syncCustom mapping not working:
Contributions are welcome! Feel free to:
Future improvements:
FAQs
A flexible macOS utility that retroactively fixes text typed in the wrong keyboard layout with support for multiple languages
We found that language-fixer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.

Security News
GitHub has revoked npm classic tokens for publishing; maintainers must migrate, but OpenJS warns OIDC trusted publishing still has risky gaps for critical projects.

Security News
Rust’s crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.