মূল বিষয়ে

উইন্ডোজের জন্য কিবোর্ড লেআউট সুইচার

লেখক

বিদেশি

আমি লিনাক্স ডেস্কটপে Super+Space শর্টকাট দিয়ে কিবোর্ডের লেআউট ইংরেজি এবং বাংলায় পরিবর্তন করি। অনেক সময় উইন্ডোজেও কাজ করতে হয়, তবে সেখানে লেআউট পরিবর্তনের জন্য উইন্ডোজের ভাষায় Windows+Space শর্টকাটটা কাজে লাগানোর সুযোগ নাই।

কিন্তু সুযোগ না থাকলে সুযোগ তৈরি করে নিতে হয়। 😎

উইন্ডোজের বিভিন্ন ধরণের ছোটখাট অটোমেশনের জন্য অটোহটকি নামের একটা পাগলাটে সিনট্যাক্সের স্ক্রিপ্টিং ল্যাংগুয়েজ রয়েছে। এটা দিয়ে বিভিন্ন কিবোর্ড শর্টকাটের সাথে স্ক্রিপ্ট অ্যাটাচ করা যায়। অতএব আমার কাজটা খুব সহজ: Super+Space শর্টকাটটার সঙ্গে এমন একটা স্ক্রিপ্ট জুড়ে দেয়া, যা লেআউট টগল করতে পারে।

সফটওয়্যারটা ডাউনলোড করে windows-layout-switcher.ahk নামে একটা স্ক্রিপ্ট লেখা শুরু করলাম। শর্টকাট ডিফাইন করার সিনট্যাক্সটা এরকম:

hotkey:: code to run Return
Code language: AutoHotkey (autohotkey)

অটোহটকি স্ক্রিপ্টে মডিফায়ারগুলোর জন্য বিশেষ ক্যারেক্টার বসাতে হয়, যেমন Shift এর জন্য +, Windows এর জন্য ^, ইত্যাদি:

^Space:: layout_switch_function Return
Code language: AutoHotkey (autohotkey)

অটোহটকি লেআউট পরিবর্তনের জন্য রেডিমেড ফাংশন সরবরাহ করে না। উইন্ডোজ নিজেও সরাসরি কোন ফাংশন কল করে, না বরং চলমান উইন্ডোগুলিতে লেআউট পরিবর্তনের জন্য একটা বিশেষ মেসেজ বা সিগনাল পাঠায়। মেসেজটা হচ্ছে:

0x0050

😆 এর একটা তুলনামূলক সহজবোধ্য গালভরা ডাকনাম WM_​INPUTLANGCHANGEREQUEST। এই মেসেজের সাথে দুইটা প্যারামিটার থাকে, wParam আর lParam, কোন লেআউট থেকে কোনটায় টগল করতে হবে ইত্যাদি জানানোর জন্য। wParam = 0x0002 সেট করে মেসেজ পাঠালে চক্রাকারে লেআউট পাল্টানো যায়।

অটোহটকি-এর PostMessage নামের একটা ফাংশন দিয়ে এধরনের মেসেজ পাঠানো যায়। সিনট্যাক্স জেনে নিয়ে বোঝা গেল স্ক্রিপ্টটা হবে সহজ সরল:

^Space:: PostMessage, 0x0050, 0x0002,,, A Return
Code language: AutoHotkey (autohotkey)

ব্যাস! এই ছোট্ট স্ক্রিপ্টটা অটোহটকি দিয়ে চালিয়ে দিলেই হয়ে গেল! Super+Space দিয়ে লেআউট সুইচ করতে পারছি উইন্ডোজেও!

আসলে এইটা চালালে কিছুই হবে না, ফট করে বন্ধ হয়ে যাবে, কারণ স্ক্রিপ্টটাকে চলমান থাকতে বলিনি। এ জন্য শুরুতে #Persistent কমান্ডটা যোগ করতে হবে। আরও কিছু টুকটাক কনফিগারেশনসহ পুরো স্ক্রিপ্টটা দাঁড়ায় এইরকম:

Click here to display content from an external service.

অটোহটকির সাথে ahk2exe নামে একটা কম্পাইলার থাকে। এইটা দিয়ে স্ক্রিপ্টটাকে কম্পাইল করে একটা স্বাভাবিক এক্সিকিউটেবল প্রোগ্রাম বানিয়ে সেটাকে উইন্ডোজের স্টার্টআপ ফোল্ডারে রেখেছি, ফলে এখন উইন্ডোজ চালু হলেই স্বয়ংক্রিয়ভাবে লিনাক্সের মত করেই লেআউট পাল্টানোর সুযোগ পাবো!


স্ক্রিপ্টের কিছু দুর্বলতা আছে, যেমন উইন্ডোজ টেন‑এ Super+Space শর্টকাটটা অন্য কাজের জন্য ডিফাইন করা থাকে, সেক্ষেত্রে সুপার কি আগে চেপে ধরা, স্পেস বার আগে ছেড়ে দেয়া, এ জাতীয় নিখুঁত টাইমিং স্কিল লাগে কখনো কখনো। তবে আমি প্রয়োজন পড়লে উইন্ডোজ সেভেনই চালাই (এখনও!), তাই সমস্যায় না পড়া পর্যন্ত স্ক্রিপ্টের সরলতা নিয়ে চিন্তিত নই।

তো… দেখা যাচ্ছে প্রধানত লিনাক্স নিয়ে লিখার জন্য ব্লগ খুলে উইন্ডোজের বিষয়েই রচনা লেখা শুরু করেছি। 😅

অবস্থান:

আগের লেখা

শুরু

পরের লেখা

জিপিজি ওয়েব কী ডিরেক্টরি

মন্তব্য করুন

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।