5 पॉइंट द्वारा GN⁺ 2023-08-23 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • AutoHotKey शक्तिशाली है, लेकिन पहली बार इस्तेमाल करने पर भारी लगने वाला Windows automation tool है, इसलिए वास्तविक व्यक्तिगत scripts का संग्रह सीखने की सामग्री के रूप में सार्वजनिक किया गया है
  • सामग्री कुल 14 files से बनी है, और इसमें फ़ोल्डर खोलना, टेक्स्ट डालना, और अलग-अलग programs के लिए shortcut बढ़ाना जैसे तुरंत आज़माए जा सकने वाले automation examples पर ज़ोर है
  • इसमें current date, em dash, ¯\_(ツ)_/¯ की quick input से लेकर vim users के लिए modal shortcut system और एक simple GUI demo तक शामिल है
  • timestamps को UTC और local time में बदलने वाली script भी शामिल है, जिससे केवल shortcuts से आगे बढ़कर व्यावहारिक workflow automation देखा जा सकता है
  • हर file में code क्या करता है, और कुछ मामलों में उसे उस तरह क्यों implement किया गया है, इस पर comments दिए गए हैं, इसलिए इसे शैक्षणिक codebase की तरह पढ़ना आसान है

वास्तविक काम के करीब AutoHotKey examples का संग्रह

शैक्षणिक codebase के रूप में पढ़ने का तरीका

  • यह repository ऐसे शैक्षणिक codebase का उदाहरण है जिसे लोग code पढ़ते हुए सीख सकें
  • हर file में code क्या करता है, इस बारे में काफी comments हैं, और कुछ implementations में किसी खास तरीके को चुनने की वजह भी साथ दी गई है
  • शैक्षणिक codebase पर अलग से विवरण newsletter लेख में आगे मिलता है
  • जिन हिस्सों में अधिक explanation चाहिए, उनके लिए GitHub issue के ज़रिए अनुरोध किया जा सकता है

1 टिप्पणियां

 
GN⁺ 2023-08-23
Hacker News टिप्पणियाँ
  • लगता है कि कोड से जुड़ी चर्चा में पहली बार मैं कुछ काम की चीज़ जोड़ सकता हूँ। लिखने के लिहाज से मैंने एक AutoHotkey script बना रखी है जो कभी भी खाली notepad.exe को जल्दी खोल देती है; ~ key दबाने पर खुलती है और फिर दबाने पर बंद हो जाती है, और अगर उसमें content हो तो save dialog खुलता है
    मेरा AHK बस इतना ही करता है

    • दिलचस्प है कि यही key आम तौर पर terminal toggle के लिए भी conventionally इस्तेमाल होती है। जैसे programmers terminal में “रहते” हैं, वैसे ही सोचता हूँ कि digital graphics वाले लोग भी sketchpad या drawing program को इसी तरह खोलते होंगे क्या
      जब window बंद या minimize किए बिना पिछली window के साथ जल्दी switch करना हो, तो Windows का default shortcut Alt + Escape काम का है। यह Alt+Tab की तरह window overview नहीं दिखाता, बल्कि सीधे पिछले focused window पर switch कर देता है
      AutoHotkey v1 में window title का कोई हिस्सा खोजकर उसे activate करने, और अगर वह पहले से active हो तो send, !{escape} से वापस जाने, और न हो तो run करने जैसा switcher/launcher boilerplate बनाया जा सकता है। अगर taskbar को clutter नहीं करना चाहते तो WinHide/WinShow भी इस्तेमाल कर सकते हैं, लेकिन कुछ windows में यह ठीक नहीं बैठता, और window detection के लिए कभी-कभी ahk_exe या ahk_class ज़्यादा सही होते हैं
    • लगता है Notepad++ auto save की वजह से बेहतर होगा। unsaved documents तक auto save होने वाली capability मुझे इसकी सबसे अच्छी features में से एक लगती है
    • ऊपर वाली script को AutoHotkey 2 में ले जाएँ तो “Tilde opens Notepad” की तरह ज़्यादा सरल लिखा जा सकता है। WinActive("Untitled - Notepad") और WinExist("*Untitled - Notepad") चेक करके उसे बंद या activate करना, और न हो तो Run "Notepad" चलाना—कुछ ऐसा तरीका है
    • Windows key दबाकर “Notepad” टाइप करने और फिर Enter दबाने से बस थोड़ा-सा तेज़ है। इसके बजाय अगर इसे एक single notes.txt document खोलने के लिए बनाया जाए, तो notes बुलाकर उसमें जोड़ना और एक ही shortcut से save/close करना भी संभव होगा—यह ज़्यादा शानदार लगेगा
    • अच्छा तरीका है। WinActive() या WinExist() functions इस्तेमाल करें तो कई title conditions को or से जोड़ सकते हैं, और ज़रूरत हो तो "Untitled - Notepad ahk_class Notepad" की तरह ahk_class condition भी साथ डाल सकते हैं
  • AutoHotkey कमाल का है, लेकिन काश इसकी language थोड़ी ज़्यादा normal होती। Aero Snap का golden ratio version reliably बनाने की कोशिश में काफी परेशान हुआ; कई monitors और sizes handle करना इतना मुश्किल होना नहीं चाहिए, लेकिन अजीब Loop syntax या मामूली mistakes के silently fail हो जाने की वजह से मज़ा खत्म हो गया और मैंने छोड़ दिया
    Python के लिए ahk module भी मिला, लेकिन keyboard module के साथ जोड़ने पर वह AutoHotkey जितना अच्छा shortcut listener नहीं बना
    https://github.com/idbrii/daveconfig/blob/main/win/autohotke...
    https://pypi.org/project/ahk/

    • इसी लिए AutoHotkey v2 है। यह AHK का Python 3 जैसा moment है; कई सालों से उपलब्ध है और stable version करीब एक साल पहले आया, लेकिन adoption अभी भी बहुत ज़्यादा नहीं दिखती
    • इसी वजह से CapsLock को Control में बदलने के अलावा मैं इसे ज़्यादा इस्तेमाल नहीं कर पाया। शायद अब AHK में compile होने वाली Lisp DSL बनाने का समय आ गया है
    • सही है, यही AHK की सबसे बड़ी समस्या है और v2 ने इसमें काफी सुधार किया है। सपना है कि किसी भी language से इस्तेमाल हो सकने वाला generic shortcut listener, wasm plugin जैसी किसी magic से संभव हो जाए
  • शादी में AutoHotKey से एक photobox बनाया था। fiancé के Nikon को USB से control करने वाले simple software और laptop पर IrfanView का साथ इस्तेमाल किया; IrfanView को folder watch करने और हमेशा latest photo दिखाने के लिए set किया था
    AutoHotKey से Preview, Autofocus और “SNAP” button वाला simple GUI बनाया। SNAP दबाने पर बड़ा countdown दिखता, फिर photo ली जाती, camera software minimize होता और IrfanView सामने आ जाता। कुछ seconds बाद फिर button GUI पर वापस आ जाता। मेहमानों को पसंद आया, photobox किराए के सैकड़ों euro बच गए और अच्छी photos भी मिल गईं

  • यह AutoHotKey script मेरे लिए game changer रही। Ctrl + Shift + V को paste without formatting पर map किया, ताकि clipboard को text में convert करके paste करे, थोड़ा wait करे और फिर original clipboard restore कर दे

    • संदर्भ के लिए, AutoHotKey के बिना भी Powertoys या PureText से यह संभव है। बहुत उपयोगी है
      https://learn.microsoft.com/en-us/windows/powertoys/
      https://stevemiller.net/puretext/
    • formatting समेत paste होना default है, यह सच में अजीब है। अब तक मुझे कभी formatting बनाए रखकर paste करने की इच्छा नहीं हुई, और समझ नहीं आता कि यह किस use case के लिए बनाया गया है
    • Ctrl+Shift+V सच में बढ़िया है। यह clipboard के लिए operating system standard shortcut होना चाहिए
      last 5 clips जैसे multi-value clipboard भी हो तो अच्छा होगा, लेकिन शायद यह बहुत बड़ी मांग हो सकती है
  • AHK Windows से बाँधकर रखने वाले ऐप्स में से एक है। मैं इसका इस्तेमाल कीबोर्ड में äöüß, áóúñ जैसे अक्षर जोड़ने, कमरे और अपार्टमेंट की लाइटों की brightness कंट्रोल करने, 08:39 –, 2023-08-22 08:39:46, 2023-08-22 — Tuesday जैसे timestamps एक-दो बटन से डालने, और Pause key toggle करने पर Tasmota-supported socket के जरिए monitor power बंद/चालू करने जैसी चीजों के लिए करता हूँ
    बस अच्छा होता अगर दूसरे keyboard को button pad की तरह इस्तेमाल करते हुए उसकी key input को consume कर लेने वाला feature होता। इसलिए ज्यादा buttons पाने के लिए मैं एक छोटा Bluetooth keyboard Raspberry Pi Zero से जोड़कर इस्तेमाल कर रहा हूँ

    • macOS पर Hammerspoon सबसे अच्छा विकल्प लगता है
      https://www.hammerspoon.org/
    • अगर लागत उठाना ठीक लगे, तो QMK या अन्य custom firmware support करने वाला सस्ता keyboard ढूँढ सकते हैं, और कुछ keys को F13~F24 या Ctrl+Alt+Shift+P जैसे दबाने में मुश्किल combinations पर map कर सकते हैं
    • Luamacros से दूसरे keyboard को intercept करके key inputs AutoHotKey को forward कर अच्छे results मिले थे
      https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
      यह भी है: https://github.com/evilC/AutoHotInterception
    • Linux पर AutoKey इस्तेमाल करता हूँ। यह AHK से कम powerful है, लेकिन basic Python इस्तेमाल करता है इसलिए अच्छा है
      https://github.com/autokey/autokey
    • AutoHotInterception इस्तेमाल करने पर AHK hardware ID के आधार पर अलग-अलग keyboard/mouse को distinguish कर सकता है। अलग keyboard पर अपना layout और macros रख सकते हैं
  • मैं भी AutoHotKey हमेशा इस्तेमाल करता हूँ। इसमें date/time stamp shortcuts के 6 प्रकार, frequently used hosts और serial ports के लिए PuTTY/SSH launcher, Outlook·Windows Terminal·Total Commander जैसे 10+ apps के state-based launchers, कहीं भी unformatted paste, line breaks हटाकर paste, special characters और emoji के लिए AltGr input layer, और media/volume shortcuts तक रखे हैं

    • साझा करने के बहाने अपनी script भी डाल रहा हूँ। 2012 से लगातार इस्तेमाल और improve करता आया हूँ
      https://gist.github.com/raveren/bac5196d2063665d2154
  • अपने personal Linux laptop पर मैं Caps Lock और Escape को swap करके इस्तेमाल करता हूँ और इसकी आदत पड़ गई है। Windows dual boot करने पर Powertoys से वही setting की थी, लेकिन company में Powertoys या Uncap install नहीं कर सकता, इसलिए AutoHotKey ही विकल्प है
    StackOverflow answer follow किया तो Caps Lock और Escape दोनों ही दोनों keys साथ में भेजने लगे, जिससे कभी-कभी Teams messages खराब हो जाते हैं
    https://github.com/microsoft/PowerToys
    https://github.com/susam/uncap
    https://stackoverflow.com/questions/38558376/how-to-map-caps...

    • Kanata शानदार है। यह Linux और Windows दोनों support करता है, लेकिन मेरा मुख्य काम Linux पर है इसलिए Windows पर अभी इस्तेमाल नहीं कर पाया
      https://github.com/jtroo/kanata
    • home row modifier keys भी recommend करता हूँ। तरीका यह है कि key को थोड़ी देर दबाने पर वह पहले जैसी behave करे, और लंबा दबाने पर दूसरा function करे
      उदाहरण के लिए https://github.com/evilC/TapHoldManager AHK में इसे implement करता है। Shift/Ctrl/Win/Alt को fdsa और jkl; के नीचे रखने से छोटी उंगली का इस्तेमाल कम होता है और उंगलियाँ home row पर ज्यादा रह सकती हैं
    • कई सालों से AHK से इन keys को swap करके इस्तेमाल कर रहा हूँ, और नीचे जैसी simple script काम करती है: CapsLock::Esc, Esc::CapsLock
      global hotkeys से programs launch करने जैसे दूसरे AHK quick improvements भी लिखकर रखे हैं: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
    • scancode map registry भी आज़माने लायक है। मैं Ctrl/CapsLock swap करने के लिए इसका इस्तेमाल कर रहा हूँ, और यह RDP software या admin-privileged apps में भी ठीक काम करता है जहाँ PowerToys handle नहीं कर पा रहा था
      https://superuser.com/questions/550679/where-can-i-find-wind...
    • इसी problem में अटका था और आखिरकार किसी तरह काम करने वाली चीज बना ली
      https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
      CapsLock को किसी और key के साथ दबाने पर Ctrl और हल्का दबाने पर Esc की तरह काम करने वाला dual function भी implement किया
  • जैसा दूसरों ने कहा है, AHK Windows पर जो काम करने देता है उनकी संख्या हैरान करने वाली है। व्यक्तिगत रूप से, कहा जा सकता है कि AHK की वजह से मैंने 100,000 डॉलर से ज़्यादा बचाए या कमाए हैं
    लेकिन AHK भाषा खुद लिखने में सबसे मज़ेदार नहीं है। मुझे हैरानी होती है कि Python या Lua में इसी स्तर का powerful tool क्यों नहीं है, और https://github.com/pywinauto/pywinauto भी व्यवहार में AHK जितना अच्छा काम नहीं करता था। आखिरकार नीचे तो WinAPI ही है, इसलिए अगर कोई अच्छी wrapper library हो तो C# भी एक विकल्प हो सकता है। मेरे हिसाब से AHK लोकप्रिय इसलिए है क्योंकि वह बदसूरत है, लेकिन काम करता है

    • अगर अभी तक नहीं किया है, तो v2 पर अपग्रेड करके देखना अच्छा रहेगा। यह इस साल की शुरुआत में आया था और भाषा काफ़ी कम बदसूरत हो गई है। command/function का फर्क हट गया है और सब कुछ function बन गया है
    • AHK को C# में फिर से लिखने और दूसरे operating systems को भी support करने की कोशिश चल रही है
      https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
    • AHK के लोकप्रिय होने की वजह यह है कि उसकी वह बदसूरती, जिसे ज़्यादातर “असली” programming languages मंज़ूर नहीं करेंगी, शुरुआती लोगों के लिए पहुंच आसान बना देती है
    • PyAutoGui भी बहुत अच्छा है। मैं इसे लंबे समय से इस्तेमाल कर रहा हूं और हाल में कुछ सरल AHK automation को फिर से लिखा है। यह 1:1 replacement नहीं है, इसलिए मैं अब भी AutoHotKey इस्तेमाल करता हूं, लेकिन UI automation features अच्छे से बनाए गए हैं
  • AutoHotKey शानदार है। मैं इसे तेज़ app switching के लिए इस्तेमाल करता हूं, और मेरे मामले में Right Alt को “shortcut activate” key बनाकर सब कुछ control करता हूं
    उसे दबाए रखकर कोई letter key दबाने पर उस app के instances के बीच cycle होता है। उदाहरण के लिए Alt+C VS Code windows पर switch करता है, और Alt+F जैसी keys किसी खास profile की नई Chrome window जैसे नए app instances खोलती हैं। Alt+numbers को अभी focused window पर set किया जा सकता है, और Alt tap करने पर edit mode चालू होता है, जिसमें current window को number keys पर assign किया जा सकता है। edit mode में H/J/K/L ऊपर/नीचे/बाएं/दाएं navigation keys बन जाते हैं, जिससे app switching काफ़ी तेज़ हो जाती है

  • पहले Diablo 3 खेलते समय जो script मैंने ढूंढकर modify की थी, वह सबसे प्रभावशाली लगी। mouse वाला हाथ mousepad पर बहुत ज़ोर से दबाने की वजह से repetitive strain injury की समस्या होने लगी थी, इसलिए controller से खेलने का तरीका खोजा
    उस script ने analog movement को character के आसपास एक छोटे circle से bind किया था, जिससे किसी भी direction में smooth तरीके से दौड़ा जा सकता था, और button दबाने पर range को दूर तक बदलकर ranged abilities cast की जा सकती थीं। हर class के लिए थोड़ी customization करने पर यह हैरान करने लायक अच्छी तरह काम करता था