import os
import re
import shutil

FILE_PATH = "/usr/share/X11/xkb/symbols/pc"
BACKUP_PATH = FILE_PATH + ".backup"

# Yeni kod bloğu
NEW_CAPS_BLOCK = """    key <CAPS> {
        type="ALPHABETIC",
        repeat=No,
        symbols[Group1]= [ Caps_Lock, Caps_Lock ],
        actions[Group1]= [ LockMods(modifiers=Lock),
                           LockMods(modifiers=Shift+Lock,affect=unlock) ]
    };"""

def patch_xkb():
    if not os.path.exists(FILE_PATH):
        print(f"Hata: {FILE_PATH} bulunamadı.")
        return

    # 1. Yedek alma
    shutil.copy2(FILE_PATH, BACKUP_PATH)
    print(f"Yedek oluşturuldu: {BACKUP_PATH}")

    with open(FILE_PATH, 'r') as f:
        content = f.read()

    # 2. Regex ile Caps Lock bloğunu bul ve değiştirme
    pattern = r'key <CAPS>\s*\{.*?\};'
    
    # Çok satırlı eşleşme için re.DOTALL kullanımı
    if re.search(pattern, content, re.DOTALL):
        new_content = re.sub(pattern, NEW_CAPS_BLOCK, content, flags=re.DOTALL)
        
        # 3. Dosyaya yazma
        with open(FILE_PATH, 'w') as f:
            f.write(new_content)
        
        # 4. XKB önbelleğini temizleme
        import subprocess
        subprocess.run(["rm", "-rf"] + 
             __import__('glob').glob("/var/lib/xkb/*.xkm"), 
            check=False)
        print("İşlem başarıyla tamamlandı. Caps Lock artık gecikmesiz.")
        print("Değişikliğin aktif olması için bilgisayarı yeniden başlatın.")
    else:
        print("Hata: Dosyada 'key <CAPS>' bloğu bulunamadı. Dosya yapısı değişmiş olabilir.")

if __name__ == "__main__":
    patch_xkb()