Initial commit: Add main application files and setup scripts
This commit is contained in:
BIN
assets/icon.png
Normal file
BIN
assets/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
19
install.bat
Normal file
19
install.bat
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
@echo off
|
||||||
|
REM install.bat
|
||||||
|
REM This script sets up a Python virtual environment and installs required libraries.
|
||||||
|
REM Make sure to run this script in the project directory.
|
||||||
|
|
||||||
|
REM Create Python virtual environment
|
||||||
|
python -m venv venv
|
||||||
|
|
||||||
|
REM Activate the virtual environment
|
||||||
|
call venv\Scripts\activate.bat
|
||||||
|
|
||||||
|
REM Upgrade pip
|
||||||
|
pip install --upgrade pip
|
||||||
|
|
||||||
|
REM Install required libraries from requirements.txt
|
||||||
|
pip install -r requirements.txt --no-cache-dir
|
||||||
|
|
||||||
|
echo Environment setup complete.
|
||||||
|
pause
|
||||||
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
keyboard==0.13.5
|
||||||
|
pyperclip==1.9.0
|
||||||
|
pystray==0.19.5
|
||||||
|
Pillow==11.3.0
|
||||||
11
run.bat
Normal file
11
run.bat
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
@echo off
|
||||||
|
REM run.bat
|
||||||
|
REM Activates the virtual environment and runs your main Python script.
|
||||||
|
|
||||||
|
REM Activate the virtual environment
|
||||||
|
call venv\Scripts\activate.bat
|
||||||
|
|
||||||
|
REM Run your main Python script (replace main.py with your script name if different)
|
||||||
|
start "OopsWrongLang" /B pythonw src\main.pyw
|
||||||
|
echo application is running in the background. you can close this window.
|
||||||
|
pause
|
||||||
147
src/main.pyw
Normal file
147
src/main.pyw
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
# oopswronglang/main.py
|
||||||
|
# This script listens for a keyboard shortcut (Ctrl + Space) and converts the text
|
||||||
|
# from English characters to Persian characters using the `persian` library.
|
||||||
|
import keyboard
|
||||||
|
import pyperclip
|
||||||
|
import time
|
||||||
|
import threading
|
||||||
|
import pystray
|
||||||
|
from PIL import Image
|
||||||
|
import re
|
||||||
|
|
||||||
|
def convert_en_characters(input_str):
|
||||||
|
"""
|
||||||
|
Assumes that characters written with standard persian keyboard
|
||||||
|
not windows arabic layout
|
||||||
|
:param input_str: String contains English chars
|
||||||
|
:return: New string with related characters on Persian standard keyboard
|
||||||
|
"""
|
||||||
|
mapping = {
|
||||||
|
'q': 'ض',
|
||||||
|
'w': 'ص',
|
||||||
|
'e': 'ث',
|
||||||
|
'r': 'ق',
|
||||||
|
't': 'ف',
|
||||||
|
'y': 'غ',
|
||||||
|
'u': 'ع',
|
||||||
|
'i': 'ه',
|
||||||
|
'o': 'خ',
|
||||||
|
'p': 'ح',
|
||||||
|
'[': 'ج',
|
||||||
|
']': 'چ',
|
||||||
|
'a': 'ش',
|
||||||
|
's': 'س',
|
||||||
|
'd': 'ی',
|
||||||
|
'f': 'ب',
|
||||||
|
'g': 'ل',
|
||||||
|
'h': 'ا',
|
||||||
|
'j': 'ت',
|
||||||
|
'k': 'ن',
|
||||||
|
'l': 'م',
|
||||||
|
';': 'ک',
|
||||||
|
"'": 'گ',
|
||||||
|
'z': 'ظ',
|
||||||
|
'x': 'ط',
|
||||||
|
'c': 'ز',
|
||||||
|
'v': 'ر',
|
||||||
|
'b': 'ذ',
|
||||||
|
'n': 'د',
|
||||||
|
'm': 'ئ',
|
||||||
|
',': 'و',
|
||||||
|
'?': '؟',
|
||||||
|
'\\':'پ',
|
||||||
|
'ض': 'q',
|
||||||
|
'ص': 'w',
|
||||||
|
'ث': 'e',
|
||||||
|
'ق': 'r',
|
||||||
|
'ف': 't',
|
||||||
|
'غ': 'y',
|
||||||
|
'ع': 'u',
|
||||||
|
'ه': 'i',
|
||||||
|
'خ': 'o',
|
||||||
|
'ح': 'p',
|
||||||
|
'ج': '[',
|
||||||
|
'چ': ']',
|
||||||
|
'ش': 'a',
|
||||||
|
'س': 's',
|
||||||
|
'ی': 'd',
|
||||||
|
'ب': 'f',
|
||||||
|
'ل': 'g',
|
||||||
|
'ا': 'h',
|
||||||
|
'ت': 'j',
|
||||||
|
'ن': 'k',
|
||||||
|
'م': 'l',
|
||||||
|
'ک': ';',
|
||||||
|
'گ': "'",
|
||||||
|
'ظ': 'z',
|
||||||
|
'ط': 'x',
|
||||||
|
'ز': 'c',
|
||||||
|
'ر': 'v',
|
||||||
|
'ذ': 'b',
|
||||||
|
'د': 'n',
|
||||||
|
'ئ': 'm',
|
||||||
|
'و': ',',
|
||||||
|
'؟': '?',
|
||||||
|
'پ': '\\',
|
||||||
|
'H':'آ',
|
||||||
|
'آ': 'H',
|
||||||
|
'C':'ژ',
|
||||||
|
'ژ': 'C',
|
||||||
|
'T':'،',
|
||||||
|
'،': 'T',
|
||||||
|
'؛':'Y',
|
||||||
|
'Y':'؛',
|
||||||
|
}
|
||||||
|
return _multiple_replace(mapping, input_str)
|
||||||
|
def _multiple_replace(mapping, text):
|
||||||
|
"""
|
||||||
|
Internal function for replace all mapping keys for a input string
|
||||||
|
:param mapping: replacing mapping keys
|
||||||
|
:param text: user input string
|
||||||
|
:return: New string with converted mapping keys to values
|
||||||
|
"""
|
||||||
|
pattern = "|".join(map(re.escape, mapping.keys()))
|
||||||
|
return re.sub(pattern, lambda m: mapping[m.group()], str(text))
|
||||||
|
|
||||||
|
# Function to handle the keyboard shortcut
|
||||||
|
def on_shortcut():
|
||||||
|
"""This function is called when the shortcut is pressed."""
|
||||||
|
orginal_text = pyperclip.paste() # Get the current clipboard content
|
||||||
|
time.sleep(0.1)
|
||||||
|
keyboard.press_and_release('ctrl+c') # Simulate pressing Ctrl+C to copy selected text
|
||||||
|
time.sleep(0.1)
|
||||||
|
text = pyperclip.paste()
|
||||||
|
# If no text is selected, do nothing
|
||||||
|
if not text or text== orginal_text:
|
||||||
|
print("No text was selected.")
|
||||||
|
return
|
||||||
|
converted_text = convert_en_characters(text)
|
||||||
|
pyperclip.copy(converted_text)
|
||||||
|
print(f"Converted text: {converted_text}")
|
||||||
|
keyboard.press_and_release('ctrl+v') # Paste the converted text
|
||||||
|
|
||||||
|
def quit_app(icon, item):
|
||||||
|
icon.stop()
|
||||||
|
import os
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
def setup_tray():
|
||||||
|
image = Image.open("assets/icon.png") # Make sure icon.png exists in your project folder
|
||||||
|
menu = pystray.Menu(pystray.MenuItem('Quit', quit_app))
|
||||||
|
icon = pystray.Icon("oopswronglang", image, "OopsWrongLang", menu)
|
||||||
|
icon.run()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Start the tray icon in a separate thread
|
||||||
|
tray_thread = threading.Thread(target=setup_tray, daemon=True)
|
||||||
|
tray_thread.start()
|
||||||
|
|
||||||
|
# Register the keyboard shortcut (Ctrl + Space)
|
||||||
|
keyboard.add_hotkey('ctrl+space', on_shortcut)
|
||||||
|
print("Press Ctrl + Space to convert text to Persian.")
|
||||||
|
|
||||||
|
# Keep the script running
|
||||||
|
keyboard.wait()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user