উত্তর:
C-u M-x shell এটা করবো.
এটি নতুন শেলের একটি নামের জন্য অনুরোধ করবে, কেবলমাত্র ডিফল্টর জন্য ফিরে আসবে (যা এরকম কিছু হবে *shell*<2>
।
এছাড়াও eshell সঙ্গে কাজ করে।
আরেকটি কৌশল, যদি আপনি এসেল ব্যবহার করেন: ঠিক যেমনটি M-x eshellআপনাকে পুনরায় নিয়ে যায় *eshell*
(নতুন এসেল শুরু করার পরিবর্তে), আপনি যদি একটি সংখ্যার উপসর্গ যুক্তি ব্যবহার করেন তবে আপনাকে সেই এসেল বাফারে নিয়ে যাবে। উদাহরণস্বরূপ, C-3M-xeshellআপনাকে নিতে হবে *eshell*<3>
। দুর্ভাগ্যক্রমে আপনি শেল ব্যবহার না করে (এসেলের পরিবর্তে), এই কৌশলটি কাজ করে না বলে মনে হচ্ছে (আমার এম্যাক্স 24.0.50.1 এ কমপক্ষে)
C-u
কমান্ড চালায় universal-argument
। এটি পরবর্তী কমান্ডে একটি যুক্তি ইনজেকশনের একটি উপায়। আপনি এটির সাথে আরও পড়তে পারেন C-h k C-u
( C-h k
রানগুলি describe-key
, খুব সহজ!)
C-h f eshell
( C-h f
রান describe-function
) দেখায় যে ফাংশনটি eshell
একটি alচ্ছিক আর্গুমেন্ট নেয়। উদ্ধৃতি: একটি সংখ্যার উপসর্গ আর্গ (যেমন হিসাবে C-u 42 M-x eshell RET
) সেই সংখ্যাটি নিয়ে সেশনে স্যুইচ করে, প্রয়োজনে এটি তৈরি করে। একটি সংখ্যাসূচক উপসর্গটির অর্থ একটি নতুন সেশন তৈরি করা।
আপনি নিজের শেলটির বাফারের সাথে নাম পরিবর্তন করতে পারেন M-x rename-buffer। তারপরে আপনি দ্বিতীয় শেলটি চালু করতে সক্ষম হবেন।
মাল্টিটর্মের দিকে তাকান , এটি ইমাসে একাধিক টার্মিনাল পরিচালনা করা আরও সহজ করে তোলে।
আপনার শেলগুলিতে স্ক্রিনের মতো ইন্টারফেস ব্যবহার করাও এটি কার্যকর হতে পারে। আমি আমার নিজের লিখেছি, তবে ইমাকসস্ক্রিনের মতো আরও কিছু আছে ।
চার বছরেরও বেশি সময় পরে, আমি দেখতে পাচ্ছি যে কিছু লোক এখনও মাঝে মাঝে এই সমস্যাটি দেখছে, তাই আমি একটি শেল লোড করতে এবং এর নাম জিজ্ঞাসা করার জন্য লিখেছিলাম একটি দ্রুত ফাংশন প্রকাশ করব। এইভাবে আপনি কোনও শেলটির নাম রাখতে পারেন "বাছাই করা ফাইলগুলি" যদি এটি ফাইলগুলি বাছাই করার জন্য উত্সর্গীকৃত হয় এবং অন্য একটি "মধুচন্দ্রি" যদি এটি মাতাল কোয়েরি চালাতে উত্সর্গীকৃত হয়। আমি এখন প্রতিদিন ব্যবহার করি (ইমেক্স 24 এ):
(defun create-shell ()
"creates a shell with a given name"
(interactive);; "Prompt\n shell name:")
(let ((shell-name (read-string "shell name: " nil)))
(shell (concat "*" shell-name "*"))))
আপনি যে কোনও বাফার ব্যবহার করছেন না কেন এটি এটি একটি নতুন শেল উদাহরণ স্বয়ংক্রিয়ভাবে উত্পন্ন করবে; এটি এমএস বা এর মতো কিছুতে এবং তাত্ক্ষণিক আনন্দের সাথে আবদ্ধ করুন:
(defun new-shell ()
(interactive)
(let (
(currentbuf (get-buffer-window (current-buffer)))
(newbuf (generate-new-buffer-name "*shell*"))
)
(generate-new-buffer newbuf)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf newbuf)
(shell newbuf)
)
)
ফলাফল আরও ভয়াবহ প্রথম বন্ধনীর পরেও চলুন, লেট ব্যবহার করে পুনর্লিখনের জন্য সুপারিশ করার জন্য ফিলসকে অনেক ধন্যবাদ ...: \
let
যদি ভেরিয়েবলগুলি স্থানীয় ব্যবহারের উদ্দেশ্যে তৈরি করা হয় তবে তাদের বেঁধে রাখতে হবে। যেমনটি এখন আপনার কাছে বৈশ্বিক মান আছে currentbuf
এবং newbuf
।
এটি প্রতিবার আপনি যখন ফাংশনটি শুরু করবেন তখন একটি নতুন শেল খুলবে এবং প্রয়োজনে স্বয়ংক্রিয়ভাবে এটির পুনরায় নামকরণ করবে। যুক্ত হওয়া যুক্তটি হ'ল যদি আপনি ফাইলগুলি দূর থেকে সম্পাদনা করেন (ডায়ার্ড / ট্রাম্প ...), এটি দূরবর্তী হোস্টের একটি শেল খুলবে এবং রিমোট হোস্টনামের সাথে এটি স্বয়ংক্রিয়ভাবে নাম পরিবর্তন করবে:
(defun ggshell (&optional buffer)
(interactive)
(let* (
(tramp-path (when (tramp-tramp-file-p default-directory)
(tramp-dissect-file-name default-directory)))
(host (tramp-file-name-real-host tramp-path))
(user (if (tramp-file-name-user tramp-path)
(format "%s@" (tramp-file-name-user tramp-path)) ""))
(new-buffer-nameA (format "*shell:%s*" host))
(new-buffer-nameB (generate-new-buffer-name new-buffer-nameA))
(currentbuf (get-buffer-window (current-buffer)))
)
(generate-new-buffer new-buffer-nameB)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf new-buffer-nameB)
(shell new-buffer-nameB)
))