حل مشکلی اساسی به وسیله پایتون: انگلیسی بودن کیبورد حین تایپ فارسی

خیلی اتفاق افتاده که موقع چت با کسی، اون بخواد فارسی تایپ کنه، ولی کیبوردش انگلیسی باشه و نفهمه و مسیج انگلیسی بیاد. مثلا sghl. خوشبختانه برای خود من همچین مشکلی پیش نمیاد زیاد، چون همیشه چشمام روی اسکرین هست. ولی وقتی کس دیگه‌ای مینویسه، به خصوص موقع چت، زیاده اتفاق میفته. خوب، قرار نیست که هر دفعه صبر کنم اون دوباره بنویسه یا با تبدیل حروف تو ذهنم اون رو رمز گشایی بکنم! پس... ایمکس، بیا بالا ;)

یه اسکریپت کوچیک پایتون مینویسم که از یه فایل اون حروف عجق وجق انگلیسی رو بگیره:

#! /usr/bin/python2
# -*- coding: utf-8 -*-

import sys

def main():
    per = ["ض", "ص", "ث",  "ق",  "ف",  "غ",  "ع",  "ه",  "خ",  "ح",  "ج",  "چ",  "ش",  "س",  "ی",  "ب",
        "ل",  "ا",  "ت",  "ن",  "م",  "ک",  "گ",  "ظ",  "ط",  "ز",  "ر",  "ذ",  "د",  "پ",  "و"]
    eng = ["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",  ","]
    s = ""
    for i in open(sys.argv[1]).readlines():
        s = s + i
    for i in range(len(per)):
        s = s.replace(eng[i], per[i])
    print(s)

if __name__ == '__main__':
    main()

چیزی برای توضیح دادن نداره. اول دو تا آرایه از حروف روی کیبورد به دو زبان فارسی و انگلیسی میگیره (که احتمالا راه بهتری هم وجود داره)، بعد فایل رو میخونه، حروف رو جایگزین میکنه و بعد پرینت. ورژن دو بودن پایتون هم به این خاطره که این ورژن پشتیبانی بهتری از UTF-8 و کاراکترهای فارسی داره.

این اسکریپت کارش رو میکنه، ولی باید هر دفعه بذارمش به یه فایل و بعد بزنم پنجره ترمینال بیاد و کد بزنم و ... . درسته، میشه به جای فایل از STDIN استفاده کنم، ولی فکر بهتری دارم. اسکریپت رو کمی تغییر میدم:

#! /usr/bin/python2
# -*- coding: utf-8 -*-

import sys
import os
import commands as cm

def main():
    per = ["ض", "ص", "ث",  "ق",  "ف",  "غ",  "ع",  "ه",  "خ",  "ح",  "ج",  "چ",  "ش",  "س",  "ی",
        "ب",  "ل",  "ا",  "ت",  "ن",  "م",  "ک",  "گ",  "ظ",  "ط",  "ز",  "ر",  "ذ",  "د",  "پ",  "و"]
    eng = ["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",  ","]
    s = cm.getoutput("xclip -selection clipboard -o")
    for i in range(len(per)):
        s = s.replace(eng[i], per[i])
    os.system("echo -n \"" + s + "\" | xclip -selection clipboard")

if __name__ == '__main__':
    main()

دو تا جا عوض شده: اول این که به جای فایل، ورودی رو از کلیپ‌بورد میگیره. و دومی هم این که خروجی رو به کلیپ‌بورد میده!

الان بهتر شد، و کافیه هر دفعه متن رو کپی و این اسکریپت رو از ترمینال اجرا کنم. ولی یه شرتکات هم میذارم که دیگه سنگ تموم بذارم ‎:D مثلا Ctrl+Alt+C گزینه خوبیه

البته این آرایه فقط حروف اصلی روی کیبورد رو داره، و مثلا «آ» یا «،» رو نداره و اگه طرف ویندوزی باشه، «و» و «پ» میرن یه جای دیگه. ولی خوب، اونجاهاش رو خودم میفهمم دیگه :)


blog comments powered by Disqus