যদি আমি ঘটনাক্রমে ইমাসে স্ক্র্যাচ বাফারটি বন্ধ করে রাখি, তবে আমি কীভাবে একটি নতুন স্ক্র্যাচ বাফার তৈরি করব ?
যদি আমি ঘটনাক্রমে ইমাসে স্ক্র্যাচ বাফারটি বন্ধ করে রাখি, তবে আমি কীভাবে একটি নতুন স্ক্র্যাচ বাফার তৈরি করব ?
উত্তর:
জিএনইউ ইম্যাকস ডিফল্ট বাইন্ডিংগুলি:
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
.emacs
অন্য ডিফল্ট স্ক্র্যাচ মোডকে সংজ্ঞায়িত করে তবে এটি নতুন স্ক্র্যাচের মোড হবে - তালিকার ইন্টারঅ্যাকশন মোড নয়।
আমি আমার .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)))
আমি যদি স্ক্র্যাচ বাফারটি দেখতে না চাই তবে আমি সিএক্স সিকে চাপ দিই, তবে এটি এটি হত্যা করে না, কেবল বাফার তালিকার শেষে রাখি, সুতরাং পরবর্তী বারের জন্য আমার এটি দরকার যখন আমাকে নতুন তৈরি করতে হবে না।
এই ইমাসউইকি পৃষ্ঠায় টিপসের পুরো গোছা রয়েছে ।
প্রথমটি এখানে:
স্ক্র্যাচ বাফারটি পুনরায় তৈরি করার জন্য একটি খুব সাধারণ ফাংশন:
(defun create-scratch-buffer nil
"create a scratch buffer"
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(lisp-interaction-mode))
ইসভিচবি *scratch*
-মোড সক্ষম করে Cx বি RET y RET।
ঠিক *scratch*
অন্যথায় Cx বি আরইটি ।
initial-major-mode
পরিবর্তনশীল (পাতার মর্মর-মিথষ্ক্রিয়া-মোড ডিফল্ট দ্বারা)।
আমি এই বছরগুলি আগে খুঁজে পেয়েছি যখন আমি প্রথম ইমাস ব্যবহার শুরু করেছি; আমি এখন কোথায় জানি না তবে এটিতে আমার ব্যক্তিগত .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)
;;;----------------------------------------------------------------------
আমি dwj এর সমাধানটি ব্যবহার করতাম, এবং আমি এটি সম্পর্কে বেশ খুশি ছিলাম, যেদিন আমি বুঝতে পেরেছিলাম যে আপনি বাস্তবে নাম পরিবর্তন করার সময় এটি ব্যর্থ হয়েছিল স্ক্র্যাচ বাফারটির করেন (উদাহরণস্বরূপ এটি সংরক্ষণ করে)।
তখন আমি এটি গ্রহণ করেছি, যা আমার পক্ষে ভাল কাজ করে:
(run-with-idle-timer 1 t
'(lambda () (get-buffer-create "*scratch*")))
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
করা সত্যিই ক্লান্তিকর হবে। আমাকে একটি অনন্য নাম নিয়ে আসতে হবে যা বর্তমানে উপস্থিত বাফারগুলির সাথে মেলে না।
(global-set-key (kbd "C-x M-z")
'(lambda ()
(interactive)
(switch-to-buffer "*scratch*")))
এটি কেবল দ্রুত *scratch*
বাফারে স্যুইচ করবে না (যেহেতু আমি প্রায়শই এটি করি), তবে একটি *scratch*
বাফার পুনরায় তৈরি করুন এবং lisp-interaction-mode
আপনি যদি এটি দুর্ঘটনাক্রমে হত্যা করেন তবে স্বয়ংক্রিয়ভাবে সক্ষম হবে। আপনার পছন্দ অনুসারে বাইন্ডিং পরিবর্তন করুন।
ডক্টরসিংয়ের মত, এই ফাংশনটি করবে:
স্ক্র্যাচ বাফারে স্যুইচ করুন। যদি বাফারটি না থাকে তবে এটি তৈরি করুন এবং এতে প্রাথমিক বার্তাটি লিখুন "
এটি একটি নতুন স্ক্র্যাচ বাফার আনবে যা প্রাথমিক স্ক্র্যাচ বাফারের মতো দেখাচ্ছে।
(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)
এটি আমি ব্যবহার করি - এটি আমার কাছে সুবিধাজনক কীস্ট্রোকের সাথে আবদ্ধ। এটি আপনাকে *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)))
আমি আমার স্ক্র্যাচ বাফারটি এমন একটি প্রকৃত ফাইল হতে পছন্দ করি যা স্বয়ংক্রিয়ভাবে সংরক্ষিত হয় এবং এটি পুনরায় খোলা কোনও ফাইল খোলার মতোই সহজ। প্রারম্ভকালে, আমি ডিফল্টটিকে মেরে ফেলেছি এবং নিজের মতো এটি খুঁজে পাই।
(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) ))
আমি এ পর্যন্ত পোস্ট করা সমাধানগুলি একটি ফাংশনে একত্রিত করেছি:
(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
ভেরিয়েবলটি ডিরেক্টরী ইম্যাক্সকে একসময় ধারণ করবে অধীনে শুরু।
ইমাকস উইকিতে উত্তর সন্ধান করুন : http://www.emacswiki.org/emacs/RecreateScratchBuffer
(defun create-scratch-buffer nil
"create a scratch buffer"
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(lisp-interaction-mode))