ইনফেরিয়র ইম্যাক্স লিস্প মোডে সেশনগুলির মধ্যে ইতিহাস মনে রাখা


9

আমি *ielm*ইমাসকে সেশনগুলির মধ্যে বাফারগুলির জন্য ইতিহাস মনে রাখতে পারি না । আমি যতদূর বলতে পারি, এই জাতীয় ইতিহাস বাফার-লোকাল ভেরিয়েবলে রেকর্ড করা হয় comint-input-ring। অতএব আমি আমার init ফাইলে নিম্নলিখিত প্রকাশটি যুক্ত করেছি:

(setq desktop-locals-to-save
    (append desktop-locals-to-save
            '((comint-input-ring . 50))))

এটি কাজ করে না। আমি জানি যে desktopপ্যাকেজটি কাজ করছে কারণ ইমাকরা desktop-globals-to-saveআমার ইআরডি ফাইলটিতে যুক্ত করা গ্লোবাল ভেরিয়েবলগুলি মনে রাখে ।

-

সম্পাদনা: savehistকোনটিই কাজ করে না। আমি মনে করি এটি কারণ comint-input-ringএকটি বাফার-লোকাল ভেরিয়েবল।


1
এটি ডেস্কটপের জন্য কেন কাজ করবে না তা খতিয়ে দেখার এখন আর সময় নেই। তবে আপনি savehist.elসংরক্ষণের জন্য ভার্সের তালিকায় এই পরিবর্তনশীলটি ব্যবহার এবং যুক্ত করার চেষ্টা করতে পারেন ।
— ড্র

ধন্যবাদ, ড্রু, তবে আমি savehistইতিমধ্যে ভেবেছিলাম (এটি উল্লেখ না করার জন্য দুঃখিত) আমি যতদূর দেখতে পাচ্ছিলাম, এটি কেবল গ্লোবাল ভেরিয়েবলের জন্য ছিল, যখন comint-input-ringবাফার-লোকাল। এখন, আমি যাই হোক না কেন চেষ্টা করেছি, সাফল্য ছাড়াই।
— এলেনা

সতর্কতা: নিম্নলিখিত সমাধানটি নিন্দাবাদ !!!! comint.elনিম্নলিখিত কোড দুটি লাইন ভিতরে মন্তব্য : (put 'comint-input-ring 'permanent-local t)এবং (make-local-variable 'comint-input-ring)। তারপরে, যুক্ত comint-input-ringকরুন desktop-locals-to-save। শেষ অবধি, প্রযোজ্য ফাইলগুলি পুনরায় বাইট-কম্পাইল করুন, ইমাকগুলি পুনরায় আরম্ভ করুন এবং জীবনযাপনকে পুরোপুরি উপভোগ করুন।
— আইনজীবি

উত্তর:


5

আপনি comint-input-ringযখন একটি *ielm*বাফারকে হত্যা করা হয় এবং আপনি এটি পুনরুদ্ধার করতে পারেন তখন আপনি বৈশ্বিক চলকটিতে বাফার-স্থানীয় মান সংরক্ষণ করতে পারেন inferior-emacs-lisp-mode-hook:

;; global copy of the buffer-local variable
(defvar ielm-comint-input-ring nil)

(defun set-ielm-comint-input-ring ()
  ;; create a buffer-local binding of kill-buffer-hook
  (make-local-variable 'kill-buffer-hook)
  ;; save the value of comint-input-ring when this buffer is killed
  (add-hook 'kill-buffer-hook #'save-ielm-comint-input-ring)
  ;; restore saved value (if available)
  (when ielm-comint-input-ring
    (message "Restoring comint-input-ring...")
    (setq comint-input-ring ielm-comint-input-ring)))

(defun save-ielm-comint-input-ring ()
  (message "Saving comint-input-ring...")
  (setq ielm-comint-input-ring comint-input-ring))

(require 'ielm)
(add-hook 'inferior-emacs-lisp-mode-hook #'set-ielm-comint-input-ring)

আপনার পছন্দসই আচরণটি পেতে এখন আপনার যোগ ielm-comint-input-ringকরা উচিত savehist-additional-variables। (আমি এই পদ্ধতির পরীক্ষা করেছি; desktop-locals-to-saveযদিও আপনারও এটি ব্যবহার করতে সক্ষম হওয়া উচিত ))


1
ম্যানুয়ালি কল করার পরিবর্তে আপনার পক্ষে LOCALযুক্তিটি ব্যবহার করা উচিত । পরবর্তীকালে বিশ্বব্যাপী হুকটিতে কলব্যাক যুক্ত করার চেষ্টা করার পরে সমস্যাগুলির কারণ হতে পারে। add-hookmake-local-variablekill-buffer-hook
— ফিল্ড করুন

আমি খুব খুশি হয়ে জানতে পেরেছিলাম যে এটি খুব inf-mongoভালভাবে কাজ করেছে (বা সম্ভবত, অন্য যে কোনও পদ্ধতি ব্যবহার করে comint) এটি এতটা সহায়ক, এবং আমাকে আরও কিছুটা শিখিয়েছে ... ধন্যবাদ!
— ব্লেক মিলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.