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

Apr 14, 2013·

2 min read

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

 (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)

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