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


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.