راهنما · کجا کار می‌کند

Lang Switcher در کنسول: Windows Terminal، cmd و PowerShell

در Windows Terminal و کنسول کلاسیک کلمه‌ی تایپ‌شده اصلاح می‌شود، ولی متن انتخاب‌شده نه: برنامه فقط با زدن Ctrl+C از انتخاب خبردار می‌شود و این کلید در کنسول فرمان را قطع می‌کند.

چه چیزی کار می‌کند

کلمه‌ی تایپ‌شده هم در Windows Terminal اصلاح می‌شود و هم در کنسول کلاسیک، یعنی پنجره‌ی conhost که cmd و Windows PowerShell در آن باز می‌شوند، اگر Windows Terminal ترمینال پیش‌فرض نباشد. فشار دوم متن تایپ‌شده را برمی‌گرداند؛ حروف بزرگ و فاصله‌ها هم منتقل می‌شوند. در کنسولی که به‌عنوان مدیر اجرا شده هم همین‌طور است: چرا.

متن انتخاب‌شده نه

متنی که با ماوس یا Shift و کلیدهای جهت‌نما انتخاب شده باشد، در کنسول تبدیل نمی‌شود. برنامه فقط با زدن Ctrl+C از انتخاب خبردار می‌شود و این کلید در کنسول، اگر چیزی انتخاب نشده باشد، خط تایپ‌شده را لغو می‌کند و فرمان در حال اجرا را قطع می‌کند. برای همین کلید میان‌بر در کنسول فقط با کلمه‌ی تایپ‌شده کار می‌کند و بدون آن کاری نمی‌کند. کلمه را درست بعد از تایپ اصلاح کنید، پیش از Enter.

جایگزینی چگونه کار می‌کند

  • Windows Terminal — مثل هر پنجره‌ی دیگری: برنامه کلمه را پاک می‌کند و جایگزین را تایپ می‌کند.
  • کنسول کلاسیک — Windows PowerShell 5.1 جایگزینی را که نویسه به نویسه فرستاده شود نمی‌پذیرد: کلمه پاک می‌شد و جایگزین ظاهر نمی‌شد. برای همین اینجا برنامه اول زبان کیبورد پنجره را عوض می‌کند و بعد یک‌جا کلمه را پاک می‌کند و همان کلیدهایی را می‌زند که شما زده‌اید. این‌طور جایگزینی هم به Windows PowerShell می‌رسد و هم به cmd.

کلمه کی همان‌طور می‌ماند

در کنسول کلاسیک کلمه‌ای با کلید مرده یا AltGr (در طرح‌بندی‌هایی با نشانه‌های روی حروف پیدا می‌شوند) با کلیدها تکرار نمی‌شود. چنین کلمه‌ای همان‌طور می‌ماند و صدای خفه می‌آید: چیزی از بین نمی‌رود.

گذرواژه در کنسول

برنامه درخواست گذرواژه در کنسول (ssh، sudo) را کادر گذرواژه نمی‌داند: آنچه آنجا تایپ شود، مثل کلمه‌ی معمولی به خاطر می‌سپارد، تا Enter یا پایان دیگر کلمه. در زبان‌هایی مثل فارسی و عربی، تا 64 فشار آخر را هم در حافظه نگه می‌دارد، تا وقتی پنجره را عوض کنید یا یک دقیقه تایپ نکنید. فشار کلیدها هرگز روی دیسک نوشته نمی‌شوند.

اگر روش جایگزینی را دستی تعیین کرده‌اید

روش جایگزینی خودش بر اساس پنجره انتخاب می‌شود. اگر در فایل تنظیمات نوشته باشید [replacement] method = "backspace"، انتخابی در کار نیست: در کنسول کلاسیک با Windows PowerShell 5.1 کلمه دوباره از بین می‌رود. همان auto را نگه دارید.

چه چیزی آزمایش نشده است

PowerShell 7 و برنامه‌های دیگر در کنسول کلاسیک همین مسیر جایگزینی را دارند، ولی اندازه‌گیری فقط در Windows PowerShell 5.1 و cmd انجام شده است. رد شدن کلید مرده و AltGr با آزمون‌ها بررسی شده است، نه در کنسول واقعی.

پرسش‌ها و مشکلاتدر GitHub Issues ↖ یا با ایمیل send.me@panda-pishet-kod.dev