این ایمکس دوست داشتنی (Backup‌ها و Autosave‌ها)

این است که برای ایمکس یک جای مخصوص درست می‌کنیم که این پشتیبان‌ها را در آن جا بریزد. این‌طوری نه ساختار سیستم فایل‌مان را شلخته می‌کنیم‌، و نه از نعمت وجود پشتیبان‌ها بی‌بهره می‌شویم.

 (custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(auto-save-file-name-transforms (quote ((".*" "~/.emacs.d/autosaves/\\1" t))))
 '(backup-directory-alist (quote ((".*" . "~/.emacs.d/backups/")))))

خوب‌، تمام نکتهٔ اصلی ماجرا این‌جاست که ما با تابع custom-set-variables سر و کار داریم. این تابع را در واقع قرار نیست که ما صدا بزنیم (ولی این یک‌بار اشکال ندارد‌). حقیقتش نیاز هم نیست‌، چون این تنظیمات را می‌توان با خود ایمکس انجام داد. کافیست از منوی ایمکس‌، Options و Customize Emacs را انتخاب کنیم‌، بخش مورد نظر را پیدا و انگولکش کنیم و سپس Apply & Save و خود ایمکس همچین چیزی را برای‌مان اضافه می‌کند! ولی خوب من حال سر و کله زدن با این منو‌ها را ندارم. پس باید بروم و همین متغیر‌ها که می‌بینید را مستقیما تغییر دهم. خوب آن وقت یک کمی کثیف‌کاری می‌شود. چرا؟ چون آن وقت این Customize ایمکس تنظیمات ما را نمی‌خواند و ممکن است برای یک همچین تنظیم پایه‌ای‌، مشکل بزاید برای‌مان.

باauto-save-file-name-transforms ما در واقع شیوهٔ نام‌گذاری Autosave‌ها را با یک Regex تغییر می‌دهیم. خود ایمکس‌، آن بخش آدرس دایرکتوری را‌، به مسیر جدید فایل تبدیل می‌کند و فایل‌ها را در آن‌جا ذخیره می‌کند. Autosave‌ها به صورت #FileName#  و به صورت خودکار ذخیره می‌شوند و شامل آخرین تغییرات یک بافر هستند.

دقیقا همین کار را هم با متغیرbackup-directory-alist انجام می‌دهیم که وظیفهٔ تغییر نام backup‌ها را بر عهده دارد. این پشتیبان‌ها در واقع آخرین وضعیت Save شدهٔ یک بافر را ارائه می‌دهند و به صورت FileName~ ‎ نام‌گذاری می‌شوند.

حالا نکته این‌جاست که احتمالا بعد از Restart ایمکس‌، با این اخطار روبرو می‌شوید که دایرکتوری Autosaves که آدرس داده‌اید وجود ندارد. یک کار این است که آن را به صورت دستی ایجادش کنید. فقط یک بار لازم است. و بعد ایمکس‌تان را اجرا کنید. یک کار دیگر هم می‌توان با دستور لیسپ زیر‌، چک کرد که اگر دایرکتوری وجود نداشت‌، خود ایمکس ایجادش کند:

(make-directory "~/.emacs.d/autosaves/" t)

من این تنظیمات را از این پست یاد گرفتم. وبلاگ قدیمی‌ایست‌، و چیز‌های خوبی در مورد ایمکس می‌توان ازش یاد گرفت.

این ایمکس دوست داشتنی (ido-mode)

حالا که ویدئو را دیدید کافیست با اضافه کردن کد زیر به ‎.emacs  آن را در ایمکس‌تان فعال کنید:

(setq ido-enable-flex-matching t)

(setq ido-everywhere t)

(ido-mode 1)

پس از قرار دادن این کد‌، کلید‌های جستجوی فایل یا تعویض بافر‌، با دستورات همتای‌شان که از ido استفاده می‌کنند‌، جایگزین می‌شوند. این ابزار قابلیت‌های شخصی‌سازی بیشتری هم دارد. مثلا این که کدام پسوند‌ها را در اولیوت قرار دهد. من نیازی به این تنظیمات پیدا نکردم. اما اگر شما وسوسه به همچین تنظیمی شده‌اید می‌توانید به این پست mastring emacs رجوع کنید.

گاها پیش می‌آید که در هنگام جستجوی فایلی (خصوصا در زمان ایجاد) این ابزار کمی دست و پا گیر می‌شود. برای فرار از این حالت کافیست دستور ٰC-f  را وارد کنید‌، تا به حالت معمول جستجوی فایل بازگردید.

این ایمکس دوست داشتنی (ergoemacs-mode)

سخت‌تر از همه این که به QWERTY وابسته‌اند. آن وقت است که اگر به Workman یا Colemak سوئیچ کنید‌، انگار به کیبورد‌تان دینامیت بسته‌اید! از آن بد‌تر این که با کاراکتر‌های فارسی کار نمی‌کنند.

این مقدمه را گفتم که بگویم‌، عده‌ای جمع شده‌اند و مدی ساخته‌اند به اسم ergoemacs-mode که هدفش حل مشکلات ذکر شده در مقدمهٔ بالاست. نتیجه‌، از عکس زیر معلوم است:

ergoemacs-mode رو چینش workman ergoemacs-mode رو چینش workman

این عکس طبق چینش Workman تولید شده‌،‌ ولی جای دکمه‌ها در لایوت‌های دیگر‌، از جمله QWERTY و Colemak هم یک‌سان است. از نکات مهم مد نظر قرار داده شده در هنگام طراحی این Key binding‌ها می‌توان به موارد زیر اشاره کرد:

  •   کلید‌های Home row بهترین‌ها هستند.
  • Alt خیلی بهتر از Ctrl است. Alt را باید با شصت گرفت که زورش خیلی بیشتر از انگشت کوچیکهٔ مخصوص Ctrl است!
  • به جای سرحرف اول دستورات‌، بهتر است به مکان دستورات هم خوانواده توجه شود. مثلا به مکان کلید‌های جاب‌جایی نگاه کنید. همین‌طور کلید‌های پاک کردن را ببینید!
  • و چند‌تای دیگر که آن‌قدرها هم مهم نیستند.

نکته این‌جاست که نتیجهٔ کار خیلی عالی شده. آن‌قدر عالی که طی رد و بدل چند ایمیل‌ در لیست ایمیل پروژه‌، زبان فارسی را هم به این مجموعهٔ کامل اضافه کردیم که نتیجه‌اش را در زیر می‌بینید:

ergoemacs-mode روی چینتش استاندارد فارسی ergoemacs-mode روی چینتش استاندارد فارسی

کیبورد استاندارد فارسی است که به صورت پیش‌فرض در لینوکس وجود دارد‌، ولی ویندوزی‌ها باید برنامهٔ متناسبش را پیدا و نصب کنند تا پشتیبانی شود D:

نصب

طبق آن‌چه که در گذشته گفتم‌، ergoemacs-mode را از مدیر‌بسته‌های ایمکس نصب کنید و سپس تنظیمات زیر را به فایل ‎.emacs‌‌تان اضافه کنید:

(setenv "ERGOEMACS_KEYBOARD_LAYOUT" "workman")

(require 'ergoemacs-mode)

(ergoemacs-mode 1)

در خط اول‌، اسم لایوت پیش‌فرض را اضافه می‌کنیم‌، و در خط‌های بعد ergoemacs-mode را فراخوانی و فعال می‌کنیم. بعد از یک Restart‌، با کلید‌های جدید روبرو می‌شوید D:

گرفتن کمک

خوب یک تغییر عادت است و احتمالا اول کار خیلی پیش می‌آید که دستورات قبلی‌تان را بزنید و نتیجه نگیرید! برای پیدا کردن کلید‌های جدید‌، کافیست C-h o را وارد کرده و سپس کلید قبلی‌تان را وارد کنید. این تابع بعد از بررسی کلید‌های قدیمی‌، هم‌تایان جدید‌شان را معرفی می‌کند.

دیگر سطوح

یکی از ویژگی‌های ergoemacs-mode‌، قابلیت تعیین سطحش است. سطوح مختلفی که با توجه به سلیقه‌های مختلف کاربران طراحی شده است. مثلا سطح guru کلید‌های فلش را برای تغییر موقعیت نشانگر می‌بندد و بعد از هر بار زدنشان‌، کلید‌های متناسب با سلیقهٔ ایمکس را نشان‌تان می‌دهد. و یا سطح master (فکر کنم) کلید backspace را خاموش می‌کند تا مجبور شوید از روش‌های پاک کردن کاراکتر ایمکس بهره بگیرید که سریع‌تر است. برای تنظیم این ویژگی‌ها کافیست سطح مورد نظر را انتخاب کنید (بعد از نصب ergoemacs از منو انتخابش کنید و ergoemacs variants را ببینید) و در دستور(setq ergoemacs-variant "SATH") آن را در جای SATH قرار دهید.

ergoemacs-extras

با فراخوانی این تابع در ایمکس‌، ergoemacs اقدام به ایجاد فایل‌های راهنمای کیبورد ergo در سطوح مختلف به فرمت svg می‌کند که می‌تواند خیلی کمک کننده باشد (عکس‌های موجود در این نوشته هم با همین روش ایجاد شده‌اند.). همین‌طور فایل‌هایی برای تطابق این کلید‌ها با محیط‌های دیگر از جمله bash ایجاد می‌شود که می‌توانند در ایجاد یک‌پارچگی برای محیط کار عالی باشند. (هنوز امتحانش نکرده‌ام ولی نتیجه‌اش را به زودی اطلاع می‌دهم.)

این فایل‌ها در مسیر ‎~‎‍/.emacs/ergoemacs-extras در دسترسند که با توجه به سطوح مختلف پوشه‌بندی شده‌اند.

نتیجه

به نظر من نتیجهٔ کار فوق‌العاده قابل قبول است. راحتی استفاده از کلید‌های پر کاربرد و راحت‌تر از آن معکوس کردن اکثر دستورات با Shift فوق‌العاده کمک می‌کند. به طور پیش‌فرض برای خیلی کار‌ها مجبوریم در ایمکس از ارسال آرگومان به دستورات برای تغییر حالت‌شان استفاده کنیم که در Ergoemacs این کار عموما با Shift انجام می‌گیرد. مثلا C-f جستجوی رو به جلو انجام می‌دهد و C-S-f جستجوی رو به عقب!

از طرفی کلید‌های C-a که در تمام محیط‌های دیگر برای انتخاب کل محتویات صفحه است و یا کلید‌های C-z, C-x, C-c, C-v, C-f, C-o, C-s, C-s-s , و خیلی کلید‌های دیگر که در محیط‌های دیگر از آن‌ها بهره می‌گیریم‌، به راحتی در این‌جا نیز جواب می‌دهند و کار ویرایش را فوق‌العاده راحت‌تر کرده‌اند. حتی با Ergoemacs دستور جدیدی اضافه شده که می‌توان با C-n یک صفحهٔ جدید ساخت‌، بدون این که نیاز به افزودن نامی به آن داشته باشیم.

یک قابلیت جالب دیگر‌، استفاده از کلید‌های yanking‌ (کپی پیست در ایمکس) بدون Region (متن انتخاب شده) است. در این صورت‌، دستورات کل خط یا صفحه را تحت تاثیر قرار می‌دهند.

در آینده بیشتر هم در مورد ergoemacs حرف می‌زنیم.

این ایمکس دوست داشتنی (تعریف کلید میانبر)

کلید میانبر سراسری

منظور از کلید میانبر سراسری‌، کلید‌هایی است که در همهٔ Major-mode‌ها (مد‌های اصلی) به راحتی عمل می‌کنند. برای نمونه C-n  یک کلید میانبر سراسری است. در تمامی مد‌ها اعم از ویرایش متن معمولی و یا کد برنامهٔ C‌، این کلید میانبر‌، نشانگر را به خط بعد منتقل می‌کند. برای تعریف چنین کلید میانبری می‌توانیم از یکی از دو روش زیر بهره ببریم:

(global-set-key "KEY" 'FUNCTION_NAME)

(define-key global-map "KEY" 'FUNCTION_NAME)

برای کسب اطلاعات بیشتر در مورد هر کدام از این توابع می‌توانید از تابع describe-function  همراه ایمکس کمک بگیرید. برای مثال M-x describe-function RET global-set-key RET . یا از کلید میانبرش استفاده کنید C-h f . همین‌طور اگر نشان‌گرتان روی یک تابع ایمکس باشد‌، خود تابع می‌تواند آن را حدس بزند.

تابع اول که تقریبا سر راست است. global-set-key  همان‌طور که از نامش پیداست‌، یک کلید سراسری به اسم KEY که می‌تواند ترکیبی به صورت"‎\C-c f" باشد‌، برای تابع FUNCTION_NAME تعریف می‌کند. همان‌طور که احتمالا متوجه شده‌اید‌، من برای نشان‌دادن Ctrl  در کلید میانبرم از ‎‎\C  استفاده کردم. همین‌طور برای Alt  باید از ‎\M  استفاده کنم. تعریف کلید به این صورت شاید کمی خسته کننده و نا خوانا به نظر بیاید. برای راحتی بیشتر می‌توان از تابع kbd  استفاده کرد. برای نمونه طبق مثالمان‌، همچین چیزی خواهیم داشت:

(global-set-key (kbd "C-c f") 'FUNCTION_NAME)

خود تابع kbd  می‌داند که چطور این کلید را ترجمه کند. برای کسب اطلاعات بیشتر در این مورد می‌توانید باز هم از C-h f  یا تابع متناظرش استفاده کنید. باور کنید که اطلاعات خیلی بهتری به دست می‌آورید ;-)

در تابع دوم ما کار مشابهی را انجام دادیم‌، با این تفاوت که تابع define-key  نیاز به این دارد که بداند کلید میانبر را در کدام محیط اجرا کند. به عبارت دیگر‌، کلید میانبر در کدام Mode در دسترس باشد. از آن‌جایی که قصد ما تعریف کلید میانبر سراسری است به محیط global-map  اشاره می‌کنیم که به define-key  می‌فهماند کلید باید در همه جا در دسترس باشد.

کلید میابر محدود به مد خاص

با این توضیح آخر بخش قبل‌، فکر کنم موضوع کاملا روشن شده باشد. کافیست برای تعریف میانبر برای یک مد خاص‌، محیط مربوط به آن مد را به define-key  نشان دهیم. برای مثال اگر می‌خواهیم که کلید میانبر تنها در محیط متنی در دسترس باشد‌، به جای global-map  از text-mode-map  استفاده می‌کنیم. محیط‌های مربوط به هر مد اصلی‌، عموما به صورت mode-name-map  شناسایی می‌شوند و در هنگام تعریف کلید‌، کافیست نام map مد مورد نظر‌تان را کشف کنید ;-)

چینش (لایوت) Workman و داستان مهاجرتم

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

در قرن ۲۱‌، دیگر این چینش در ابزاری محدود به سخت‌افزار مورد استفاده قرار نمی‌گیرد. در عوض حالا می‌توان چینشی طراحی کرد که بیشتر به نیاز کاربر بیاید. چینشی که در آن کاربر مجبور به جابجایی زیاد انگشتانش نباشد. این جابجایی‌ها شاید به نظر کوچک بیایند‌، ولی در تایپ‌های طولانی مدت شما با همین قدم‌های کوچک‌، کیلو‌متر‌ها مسافت را طی کرده‌اید! باور نمی‌کنید؟ کافیست فاصلهٔ بین هر دو دکمهٔ کنار هم کیبورد را چیزی در حدود ۲ سانتی‌متر فرض کنیم. آن وقت برای تایپ همین پاراگراف حاضر‌، تا الان من حداقل ۹۵۰ سانتی‌متر (۴۷۵ کاراکتر) و آن هم تنها در صورتی که تمام کاراکتر‌هایم در کنار هم باشند (در کنار هشت انگشت تایپم) مصافت طی کرده‌ام! (این حداقل خیلی خیلی ایده‌آل است و فکر نمی‌کنم هرگز اتفاق بیافتد، حداقل در چینش فارسی‌! ولی فکر کنم مثال مناسبی برای نشان دادن عمق موضوع است.)

از قرار این موضوع تا 1930 و انتشار چینش Dvorak چندان جدی گرفته نشد. چینشی که تنها سعی می‌کرد‌، قابل قبول‌تر از QWERTY باشد. تغییراتش نسبت به آن زیاد نبودند‌، ولی نتیجهٔ کاربر پسند‌تری داشتند. اما به نظرم‌، پرجرات‌ترین تغییر در این چینش سنتی‌، توسط Colemak ایجاد شد! 2006! ۷۶ سال طول کشید تا این نیاز عمیقا درک شود! البته بودند چینش‌هایی که سعی در بهبود QWERTY داشته باشند‌، اما Colemak متفاوت بود. چینشی که در آن سعی شد‌، پر استفاده‌ترین کاراکتر‌ها‌، در ردیف وسطی قرار گیرند (ردیفی که در روش تایپ استاندارد‌، انگشتان باید روی آن‌ها قرار گیرند و در اصطلاح به آن‌ها Home row می‌گویند). نتیجهٔ کار فوق‌العاده بهتر شده بود. جادی عزیز‌، خیلی وقت پیش در مورد Colemak و بهبود‌هایش نسبت به QWERTY نوشت که پیشنهاد می‌کنم بخوانید.

و اما Workman! در حقیقت چینش مورد بحث ما‌، سعی کرده نسخهٔ بهبود یافتهٔ Colemak باشد. خیلی از ایده‌ها را از آن به ارث برده و شباهت خیلی خیلی کمتری نسبت به QWERTY دارد. طراح Workman‌، این‌طور فکر می‌کرد که همیشه استفاده از Home row بهترین جا برای قرار گرفتن حروف نیست. مثلا نکته این‌جا بود که حرکت طبیعی انگشتان‌، کلید I در صفحه‌کلید QWERTY را‌، راحت‌تر از H تایپ می‌کنند (انگشتان به بالا یا پایین‌، راحت‌تر حرکت می‌کنند تا به چپ و راست!). این بود که نقشه‌ای به صورت زیر طراحی کرد که میزان راحتی دسترسی نسبت به کلید‌ها را در آن نمره دهی کرده بود:

امتیاز‌دهی به کلید‌های کیبورد بر اساس میزان راحتی در دسترسی امتیاز‌دهی به کلید‌های کیبورد بر اساس میزان راحتی در دسترسی

پس ار آن تنها کافی بود که کاراکتر‌ها را نسبت به میزان استفاده‌اش در این خانه‌ها جا دهد. نتیجهٔ کار و امتیاز‌های کسب شده در مقایسه با دیگر چینش‌ها چشم‌گیر بود! مثلا در این‌جا میزان استفاده از دو ستون وسط در چند لایوت مختلف را می‌بینیم (ستون‌هایی که نیاز به حرکت انگشتان به چپ و راست دارند که باعث کشش عضلانی انگشتان می‌شود):

  • QWERTY: 22%
  • Dvorak: 14%
  • Colemak: 12%
  • Workman: 6%

یا مثالی نزدیک‌تر به نیاز‌مان. میزان جابجایی انگشت‌ها:

نتیجهٔ تست تایپ در چهار چینش مختلف نتیجهٔ تست تایپ در چهار چینش مختلف

در این مثال تایپ کتاب Don Quixote با لایوت‌های مختلف شبیه سازی شده. همان‌طور که می‌بینید Colemak مصافت کمتری نسبت به QWERTY و Dvorak را طی کرده. اما Workman از آن‌ هم کمتر است. ۶۹۶ متر! شاید فکر کنید که این خیلی کم به نظر می‌آید. ولی بیایید به روش قبلی‌مان حسابش کنیم. ۶۹۶ متر = ۶۹۶۰۰ سانتی‌متر = ۳۴۰۰۰ دکمه (با احتساب فاصلهٔ تقریبا ۲ سانتی‌متری بین هر دو دکمهٔ کنار هم). یعنی با Workman سی و چهار هزار دکمهٔ کمتر فشار داده شده.

البته بهبود این چینش به Workman ختم نمی‌شود. چینش‌های دیگری هم هستند که خرده‌هایی به این لایوت گرفته‌اند و سعی می‌کنند به روش خود آن را بهبود ببخشند. خوبی این همه چینش جدید این است که می‌توان با دست باز‌تری انتخاب کرد و نتیجهٔ مطلوب‌تری گرفت. همین‌جا هم بگویم که اصلا تایید نمی‌کنم که Workman بهترین چینش ممکن است‌! این چینش اولین و آخرین چینش انتخابی من برای مهاجرت است!

قضیهٔ مهاجرت من به Workman

دو سال و خرده‌ای پیش بود که بعد از هشت نه سال کاربر کامپیوتر بودن‌، تصمیم گرفتم که تایپ استاندارد را یاد بگیرم و هی در هنگام تایپ به دستانم نگاه نکنم (می‌دانم خیلی دیر بود). حقیقتش برایم خیلی سخت بود. حتی چند باری قبلا تلاش کرده بودم و دلزده رهایش کرده بودم. مشکل این‌جا بود که بیش از حد سعی می‌کردم به حافظه تکیه کنم. این بود که بعد از یک استراحت چند هفته‌ای‌، دوباره شروع می‌کردم و نتیجهٔ بهتری می‌گرفتم. تا این که خلاصه به سرعت تایپ معقولی رسیدم.

سوئیچ به فارسی فوق‌العاده آسان‌تر بود. تنها کافی بود که یاد بگیرم جای کدام حرف انگلیسی‌، چه تایپ کنم. بعد از معرفی Colemak توسط جادی هم سعی کردم که آن را بچشم‌، ولی به دلم ننشست. شاید به خاطر این که آن موقع با QWERTY هم آشنا نبودم. ولی نه‌، من Workman را هم تنها به خاطر تنوعش انتخاب کردم!

این یعنی این که اصلا فکر نکنید که این اطلاعاتی که در بالا نوشتم‌‌، دلیل مهاجرتم به Workman بوده باشد. این چینش هر چقدر هم خوب باشد‌، بسیاری از برنامه‌های وابسته به کیبوردم را مثل i3, pentadactyl و از همه مهم‌تر Emacs را تحت تاثیر قرار می‌دهد! تغییر کلید‌های یک مرحله‌ای را می‌شود تحمل کرد‌، ولی با تغییر به Workman یک دستور سادهٔ ایمکس مثل C-x C-f به کابوس تبدیل می‌شود! (به زودی این مشکل را هم در ایمکس حل خواهیم کرد!)

ولی حدودا بیست روز پیش و فقط و فقط‌، برای ایجاد تنوع تصمیم به تغییر چینش کیبورد گرفتم. بعد از یک جستجوی چند ساعته هم تصمیم نهایی‌ام شد Workman. قبل از آن هم یک تست از سرعت تایپ QWERTYام گرفتم محض یادگاری که نتیجه‌اش شد ۲۰۴ کاراکتر در دقیقه و با درستی ۹۹.۳ درصد! و انتقال شروع شد!

یک کابوس به تمام معنا! مشکل را تازه درک کرده بودم. در هنگام تایپ اصلا به حافظه به آن معنی که می‌شناختم نیازی نبود. نیاز اصلی حافظهٔ عضلانی است. و QWERTY خیلی محکم در این حافظه ثبت شده بود. تا موقعی که شش دانگ حواسم جمع تایپ کردن بود مشکلی نبود. ولی تا بیخیال حافظه‌ام می‌شدم‌، انگشتانم به QWERTY سوئیچ می‌کردند. جدال با این حافظه سخت بود. شاید بخندید‌، ولی دو سه روز اول‌، سردرد شدیدی گرفتم! از آن مهم‌تر این که به صورت ناخودآگاه نکته بین‌تر شده بودم. این است که نتیجه گرفتم تغییر عادات‌، خیلی خیلی به درد بخور است!

خلاصهٔ کلام‌، بعد از ۲۰ روز‌، الان دیگر نمی‌توانم به QWERTY تایپ کنم! کاملا پاک شده. ولی چه باک‌، هر وقت به Workman دسترسی نداشتم‌، به دستانم نگاه می‌کنم و تایپ می‌کنم D:. جالبی‌اش این‌جاست که خطای تایپ فارسی‌ام هم زیاد شده بود. یادتان هست که گفته بودم که برای تایپ فارسی کاراکتر‌ها را با همتایان انگلیسی‌شان لینک کرده بودم؟ فکر کنم مشکل از همان‌جا آب می‌خورد.

ولی الان نتیجه به نظرم قابل قبول شده! سرعت تایپم به ۲۲۶ کاراکتر در دقیقه رسیده! این در حالی است که درستی کاراکتر‌ها به ۹۴ درصد نزول پیدا کرده. یک حساب سرسری یعنی این که اگر میزان درستی کاراکتر‌ها بهبود ببخشم‌، نتیجهٔ سرعت تایپ از این هم بیشتر خواهد بود که به نظرم خیلی جذاب است.