ইমাসগুলিতে * স্ক্র্যাচ * বাফারটি আবার খুলুন?


168

যদি আমি ঘটনাক্রমে ইমাসে স্ক্র্যাচ বাফারটি বন্ধ করে রাখি, তবে আমি কীভাবে একটি নতুন স্ক্র্যাচ বাফার তৈরি করব ?

উত্তর:


199

জিএনইউ ইম্যাকস ডিফল্ট বাইন্ডিংগুলি:

C-xb *scratch* RET

বা, আরও শব্দবাচক

M-x switch-to-buffer *scratch* RET

*scratch*বাফার হ'ল বাফারটি শুরু হওয়ার পরে বাফার হয় এবং এর প্রধান মোড লিস্প ইন্টারঅ্যাকশন থাকে । দ্রষ্টব্য: *scratch*বাফারের জন্য মোডটি ভেরিয়েবল দ্বারা নিয়ন্ত্রিত হয় initial-major-mode

সাধারণভাবে আপনি যতগুলি "স্ক্র্যাচ" বাফার আপনার পছন্দমতো তৈরি করতে পারেন এবং আপনি পছন্দ করুন তবে নাম দিন।

C-xb NAME RET

একটি বাফারে স্যুইচ করে NAME, এটি উপস্থিত না থাকলে তৈরি করে। আপনি C-xC-wবা ( M-x write-file RETযেখানে) সেভ করা উচিত এমন কোনও ফাইল বাছাই না করা পর্যন্ত একটি নতুন বাফার ডিস্কের কোনও ফাইলের সাথে সম্পর্কিত নয় ।

M-x text-mode RET

বর্তমান বাফারের প্রধান মোডটিকে পাঠ্য মোডে পরিবর্তন করে। উপলব্ধ সমস্ত মোড (যে কোনও নতুন প্যাকেজগুলির প্রয়োজন ছাড়াই) সন্ধান করতে, আপনি টাইপ করে একটি তালিকা পেতে পারেন:

M-x apropos-command -mode$ RET


8
নোট করুন যে স্ক্র্যাচ সম্পর্কে বিশেষ কিছু রয়েছে , কমপক্ষে GNU Emacs 21 এবং তার পরে: একটি নতুন স্ক্র্যাচ বাফারে স্যুইচ করা এটিকে আবার লিস্প ইন্টারঅ্যাকশন মোডে রাখে।
পিটার এস হাউজেল

এটির যেমন দ্রুত অনুসরণ করা ঠিক তেমনি আপনার যদি .emacsঅন্য ডিফল্ট স্ক্র্যাচ মোডকে সংজ্ঞায়িত করে তবে এটি নতুন স্ক্র্যাচের মোড হবে - তালিকার ইন্টারঅ্যাকশন মোড নয়।
ocodo

23

আমি আমার .emacs এ নিম্নলিখিতগুলি যুক্ত করছি:

;; bury *scratch* buffer instead of kill it
(defadvice kill-buffer (around kill-buffer-around-advice activate)
  (let ((buffer-to-kill (ad-get-arg 0)))
    (if (equal buffer-to-kill "*scratch*")
        (bury-buffer)
      ad-do-it)))

আমি যদি স্ক্র্যাচ বাফারটি দেখতে না চাই তবে আমি সিএক্স সিকে চাপ দিই, তবে এটি এটি হত্যা করে না, কেবল বাফার তালিকার শেষে রাখি, সুতরাং পরবর্তী বারের জন্য আমার এটি দরকার যখন আমাকে নতুন তৈরি করতে হবে না।


আমি যখন "আইবুফার" থেকে এই পরামর্শটি চেষ্টা করি, তখন পরামর্শটি উপেক্ষা করা হয়। তবে সর্বোত্তম হিসাবে আমি বলতে পারি, "আইফুফার" "কিল-বাফার" ব্যবহার করছে। আপনি কি আমাকে সাহায্য করতে পারেন?
এলেটিট

ওয়েল, গ্রাফিকাল ইন্টারফেস স্ক্র্যাচ "ক্লোজ বাফার" টিপুন মুছে ফেলা হয়। এটি কেবলমাত্র সিএক্স কে এর জন্য কাজ করে
মরিজিও লোরেটি

15

এই ইমাসউইকি পৃষ্ঠায় টিপসের পুরো গোছা রয়েছে ।

প্রথমটি এখানে:

স্ক্র্যাচ বাফারটি পুনরায় তৈরি করার জন্য একটি খুব সাধারণ ফাংশন:

(defun create-scratch-buffer nil
   "create a scratch buffer"
   (interactive)
   (switch-to-buffer (get-buffer-create "*scratch*"))
   (lisp-interaction-mode))             

9

ইসভিচবি *scratch*-মোড সক্ষম করে Cx বি RET y RET।

ঠিক *scratch*অন্যথায় Cx বি আরইটি ।


ডিফল্ট বাইন্ডিংয়ের সাথে, 'y RET' প্রয়োজন হয় না এবং কেবল নতুন তৈরি স্ক্র্যাচ বাফারটিতে একটি 'y' এবং একটি নতুন লাইন সন্নিবেশ করে ।
ট্রে জ্যাকসন 20

ওফস, সম্ভবত এটি ইসভিচ-মোড থেকে এসেছে। এর জন্যে দুঃখিত. অন্য বিষয়ে, iswitchb- মোড চেষ্টা করে দেখুন;)
স্টিভেন হুইগ

এক না, এছাড়াও, সেখানে নাম সম্পর্কে কিছুই বিশেষত্ব আছে উচিত স্ক্র্যাচ । যেকোন সংখ্যক "স্ক্র্যাচ" বাফার তৈরি করতে স্বেচ্ছাসেবী নাম সহ কেউ Cx বি ব্যবহার করতে পারেন।
ক্রিস কনওয়ে

1
সেখানে হয় নাম * আঁচড়ের দাগ * (গৃহীত উত্তরে উল্লিখিত) সম্পর্কে বিশেষ কিছু - আপনি একটি বাফার * আঁচড়ের দাগ * প্রধান মোড অনুযায়ী সেট করা হবে নামক তৈরি initial-major-modeপরিবর্তনশীল (পাতার মর্মর-মিথষ্ক্রিয়া-মোড ডিফল্ট দ্বারা)।
21

4

আমি এই বছরগুলি আগে খুঁজে পেয়েছি যখন আমি প্রথম ইমাস ব্যবহার শুরু করেছি; আমি এখন কোথায় জানি না তবে এটিতে আমার ব্যক্তিগত .el ফাইলগুলিতে সর্বদা একটি বাড়ি ছিল। এটি গুগল অনুসন্ধানে পপ আপ করে।

;;; Prevent killing the *scratch* buffer -- source forgotten
;;;----------------------------------------------------------------------
;;; Make the *scratch* buffer behave like "The thing your aunt gave you,
;;; which you don't know what is."
(save-excursion
  (set-buffer (get-buffer-create "*scratch*"))
  (make-local-variable 'kill-buffer-query-functions)
  (add-hook 'kill-buffer-query-functions 'kill-scratch-buffer))

(defun kill-scratch-buffer ()
  ;; The next line is just in case someone calls this manually
  (set-buffer (get-buffer-create "*scratch*"))

  ;; Kill the current (*scratch*) buffer
  (remove-hook 'kill-buffer-query-functions 'kill-scratch-buffer)
  (kill-buffer (current-buffer))

  ;; Make a brand new *scratch* buffer
  (set-buffer (get-buffer-create "*scratch*"))
  (lisp-interaction-mode)
  (make-local-variable 'kill-buffer-query-functions)
  (add-hook 'kill-buffer-query-functions 'kill-scratch-buffer)

  ;; Since we killed it, don't let caller do that.
  nil)
;;;----------------------------------------------------------------------

3

আমি dwj এর সমাধানটি ব্যবহার করতাম, এবং আমি এটি সম্পর্কে বেশ খুশি ছিলাম, যেদিন আমি বুঝতে পেরেছিলাম যে আপনি বাস্তবে নাম পরিবর্তন করার সময় এটি ব্যর্থ হয়েছিল স্ক্র্যাচ বাফারটির করেন (উদাহরণস্বরূপ এটি সংরক্ষণ করে)।

তখন আমি এটি গ্রহণ করেছি, যা আমার পক্ষে ভাল কাজ করে:

  (run-with-idle-timer 1 t
    '(lambda () (get-buffer-create "*scratch*")))

3

scratchএকটি নতুন স্ক্র্যাচ বাফার খোলার জন্য আমার কাছে একটি ইন্টারেক্টিভ কমান্ড রয়েছে (আমি কয়েকটি পেতে চাই):

(defun scratch ()
  "create a new scratch buffer to work in. (could be *scratch* - *scratchX*)"
  (interactive)
  (let ((n 0)
        bufname)
    (while (progn
             (setq bufname (concat "*scratch"
                                   (if (= n 0) "" (int-to-string n))
                                   "*"))
             (setq n (1+ n))
             (get-buffer bufname)))
  (switch-to-buffer (get-buffer-create bufname))
  (if (= n 1) initial-major-mode))) ; 1, because n was incremented

থেকে গৃহীত: http://everything2.com/index.pl?node_id=1038451


কীভাবে কেবল নতুন বাফার (সিক্স বি আরইটি bufname) এ স্যুইচিংয়ের চেয়ে এটি উন্নত ?

@ বিগনোজ: আমি ব্যবহার করি ido-modeএবং সাধারণত বেশ কয়েকটি বাফার খোলা থাকে। ব্যবহার করে একটি নতুন বাফার তৈরি C-x bকরা সত্যিই ক্লান্তিকর হবে। আমাকে একটি অনন্য নাম নিয়ে আসতে হবে যা বর্তমানে উপস্থিত বাফারগুলির সাথে মেলে না।
পেপ্রিকা

3
(global-set-key (kbd "C-x M-z")
                '(lambda ()
                   (interactive)
                   (switch-to-buffer "*scratch*")))

এটি কেবল দ্রুত *scratch*বাফারে স্যুইচ করবে না (যেহেতু আমি প্রায়শই এটি করি), তবে একটি *scratch*বাফার পুনরায় তৈরি করুন এবং lisp-interaction-modeআপনি যদি এটি দুর্ঘটনাক্রমে হত্যা করেন তবে স্বয়ংক্রিয়ভাবে সক্ষম হবে। আপনার পছন্দ অনুসারে বাইন্ডিং পরিবর্তন করুন।


3

কেবল unkillable-scratchমেলপায় ইম্যাক্স প্যাকেজটি নোট করার জন্য এটি করবে। scratch-persistসেশনগুলির মধ্যে বাফারটি স্বয়ংক্রিয়ভাবে সংরক্ষণ এবং পুনরুদ্ধার করবে is


2

ডক্টরসিংয়ের মত, এই ফাংশনটি করবে:

স্ক্র্যাচ বাফারে স্যুইচ করুন। যদি বাফারটি না থাকে তবে এটি তৈরি করুন এবং এতে প্রাথমিক বার্তাটি লিখুন "

এটি একটি নতুন স্ক্র্যাচ বাফার আনবে যা প্রাথমিক স্ক্র্যাচ বাফারের মতো দেখাচ্ছে।

(defun switch-buffer-scratch ()
  "Switch to the scratch buffer. If the buffer doesn't exist,
create it and write the initial message into it."
  (interactive)
  (let* ((scratch-buffer-name "*scratch*")
         (scratch-buffer (get-buffer scratch-buffer-name)))
    (unless scratch-buffer
      (setq scratch-buffer (get-buffer-create scratch-buffer-name))
      (with-current-buffer scratch-buffer
        (lisp-interaction-mode)
        (insert initial-scratch-message)))
    (switch-to-buffer scratch-buffer)))

(global-set-key "\C-cbs" 'switch-buffer-scratch)

2

এটি আমি ব্যবহার করি - এটি আমার কাছে সুবিধাজনক কীস্ট্রোকের সাথে আবদ্ধ। এটি আপনাকে *scratch*ইতিমধ্যে উপস্থিত রয়েছে কিনা তা নির্বিশেষে আপনাকে বাফারে প্রেরণ করে এবং এতে সেট করে রাখেlisp-interaction-mode

(defun eme-goto-scratch () 
  "this sends you to the scratch buffer"
  (interactive)
  (let ((eme-scratch-buffer (get-buffer-create "*scratch*")))
    (switch-to-buffer eme-scratch-buffer)
    (lisp-interaction-mode)))

2

আমি আমার স্ক্র্যাচ বাফারটি এমন একটি প্রকৃত ফাইল হতে পছন্দ করি যা স্বয়ংক্রিয়ভাবে সংরক্ষিত হয় এবং এটি পুনরায় খোলা কোনও ফাইল খোলার মতোই সহজ। প্রারম্ভকালে, আমি ডিফল্টটিকে মেরে ফেলেছি এবং নিজের মতো এটি খুঁজে পাই।

(add-hook 'emacs-startup-hook
  (lambda ()
    (kill-buffer "*scratch*")
    (find-file "/Users/HOME/Desktop/.scratch")))

আমার একটি কাস্টম কিল-বাফার ফাংশন রয়েছে যা মূলত একই জিনিসটি করে - আমার ব্যক্তিগত স্ক্র্যাচ সংরক্ষিত ফাইলটি আবার খোলে এবং যদি আমি শেষের দৃশ্যমান বাফারটিকে হত্যা করি তবে ডিফল্ট স্ক্র্যাচটি মেরে ফেলে।

আমি কিছু desktop.elফাংশন কাস্টমাইজ করেছি পরে (kill-buffer "*scratch*") এবং লোড করতে(find-file "/Users/HOME/Desktop/.scratch") যাতে ফাইল এ গিয়ে Emacs থেকে প্রস্থান গত প্রোফাইল ডিফল্ট আঁচড়ের দাগ দ্বারা দাফন না হয়ে যায় অথবা যখন এ গিয়ে Emacs চালু আমার কাস্টম আঁচড়ের দাগ দ্বারা কবর দিল।

আমি ব্যবহার উপভোগ করছি auto-save-buffers-enhanced, যা স্বয়ংক্রিয়ভাবে কোনও ফাইল এক্সটেনশান সাশ্রয় করে যা নির্দিষ্টভাবে বাদ দেওয়া হয়নি:

https://github.com/kentaro/auto-save-buffers-enhanced/blob/master/auto-save-buffers-enhanced.el

(require 'auto-save-buffers-enhanced)
(auto-save-buffers-enhanced t)
(setq auto-save-buffers-enhanced-save-scratch-buffer-to-file-p 1)
(setq auto-save-buffers-enhanced-exclude-regexps '("\\.txt" "\\.el" "\\.tex"))

আমি @ পেপ্রিকা দ্বারা ফাংশনটির সামান্য প্রকরণ ব্যবহার করি যখন আমি কোনও ফাইল-পরিদর্শনকারী বাফার তৈরি করতে চাই:

(defun lawlist-new-buffer ()
  "Create a new buffer -- \*lawlist\*"
(interactive)
  (let* (
    (n 0)
    bufname)
  (catch 'done
    (while t
      (setq bufname (concat "*lawlist"
        (if (= n 0) "" (int-to-string n))
          "*"))
      (setq n (1+ n))
      (if (not (get-buffer bufname))
        (throw 'done nil)) ))
  (switch-to-buffer (get-buffer-create bufname))
  (text-mode) ))

1

আমি এ পর্যন্ত পোস্ট করা সমাধানগুলি একটি ফাংশনে একত্রিত করেছি:

(defun --scratch-buffer(&optional reset)
  "Get the *scratch* buffer object.
Make new scratch buffer unless it exists. 
If RESET is non-nil arrange it that it can't be killed."
  (let ((R (get-buffer "*scratch*")))
    (unless R
      (message "Creating new *scratch* buffer")
      (setq R (get-buffer-create "*scratch*") reset t))
        (when reset
          (save-excursion
            (set-buffer R)
            (lisp-interaction-mode)
            (make-local-variable 'kill-buffer-query-functions)
            (add-hook 'kill-buffer-query-functions '(lambda()(bury-buffer) nil)
          )))
    R))

আপনার .emacs এ এই ফাংশনটি প্রয়োগ করতে ব্যবহার করুন:

(--scratch-buffer t)
(run-with-idle-timer 3 t '--scratch-buffer)

এটি স্ক্র্যাচ বাফারটিকে প্রথমে অবিনাশযোগ্য করে তুলবে এবং সংরক্ষণ করা থাকলে এটি পুনরায় তৈরি করা হবে। অতিরিক্তভাবে আমরা scratchদ্রুত বাফার আনতে শর্টকাট ফাংশন ব্যবহার করতে পারি:

(defun scratch()
  "Switch to *scratch*.  With prefix-arg delete its contents."
  (interactive)
  (switch-to-buffer (--scratch-buffer))
  (if current-prefix-arg
      (delete-region (point-min) (point-max))
    (goto-char (point-max))))

অতীতে এটি ইমালস শুরু হয়েছিল এমন মূল স্টার্টআপ-ডিরেক্টরিটি জানতে কার্যকর প্রমাণিত হয়েছে। এটি হয় মান desktop-dirnameবা default-directoryস্ক্র্যাচ-বাফার স্থানীয় পরিবর্তনশীল:

(defvar --scratch-directory
  (save-excursion (set-buffer "*scratch*") default-directory)
  "The `default-directory' local variable of the *scratch* buffer.")

(defconst --no-desktop (member "--no-desktop" command-line-args)
  "True when no desktop file is loaded (--no-desktop command-line switch set).")

(defun --startup-directory ()
  "Return directory from which Emacs was started: `desktop-dirname' or the `--scratch-directory'.
Note also `default-minibuffer-frame'."
  (if (and (not --no-desktop) desktop-dirname) 
      desktop-dirname
    --scratch-directory))

সুতরাং স্টার্টআপ ডিরেক্টরিটি সর্বদা আপনার মেকফিলের মূল ডিরেক্টরিটি, টোডো-ফাইল ইত্যাদি ফিরিয়ে আনবে ইত্যাদি ক্ষেত্রে ডেস্কটপ না থাকলে ( --no-ডেস্কটপ কমান্ডলাইন-স্যুইচ বা কোনও ডেস্কটপ-ফাইল নেই) --scratch-directoryভেরিয়েবলটি ডিরেক্টরী ইম্যাক্সকে একসময় ধারণ করবে অধীনে শুরু।



0

গৃহীত উত্তরের সাথে যুক্ত করতে, আপনার যদি আইএলও মোড চালু থাকে (এবং এটি স্বতঃপূরণ হয় C-x b, এভাবে আপনাকে লিখতে দেয় না *scratch*), তবে চেষ্টা করুন:

C-xb C-b*scratch* RET

C-x b C-b *scratch* RET


-3

C-xb এবং তারপর টাইপ করুন *scratch* ↩︎

একটি নতুন বাফার তৈরি করতে যা লিস্প ইন্টারঅ্যাকশন মোডে রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.