একটি ফ্রেমে একটি উইন্ডো "পপ" করুন


13

প্রায়শই, আমি আমার উইন্ডোগুলি স্বয়ংক্রিয়ভাবে বিভক্ত হয়ে পড়েছি যতক্ষণ না আমি নির্বিচারে সিদ্ধান্ত নিতে পারি যে বর্তমান ফ্রেমের সকলের জন্য পর্যাপ্ত রিয়েল এস্টেট নেই। যখন এটি ঘটে তখন আমি ম্যানুয়ালি একটি উইন্ডো মুছি, একটি ফ্রেম তৈরি করি এবং সেই মোছা উইন্ডোটিতে স্যুইচ করি। আমি কীভাবে এলিসপ ফাংশনটি এটি লিখতে পারি?

আমি চেষ্টা করেছিলাম:

(defun pop-window-into-frame ()
  (interactive)
  (delete-window)
  (make-frame-command)
  (switch-to-prev-buffer))

তবে কিছু কারণে এটি আমার যা ভাবা উচিত তা করে না।

উত্তর:


15

পরিবর্তে এটি চেষ্টা করুন:

(defun my-turn-current-window-into-frame ()
  (interactive)
  (let ((buffer (current-buffer)))
    (unless (one-window-p)
      (delete-window))
    (display-buffer-pop-up-frame buffer nil)))

1
অন্য একটি জিনিস আমি জানতাম না যে আমি এটি অন্য কেউ না লিখেছি wrote কুল।
গ্লুকাস

নিস! সংক্ষিপ্ত হওয়ার জন্য +1।
পাইথননট

(ন্যূনতম) পারফরম্যান্স এফেক্টের নিরিখে - যদি লেটগুলি এবং ফর্মগুলি অদলবদল না করা হয় তবে এটি কী পার্থক্য করবে?
ম্যাথিয়া

@ মাথিয়াস আমি নিশ্চিত না যে এই মুহূর্তে বিপর্যয়টি অর্থবোধ করবে কিনা, আমি বর্তমান বাফারকে বাধ্য করছি কারণ উইন্ডোটি মুছে ফেলা হলে বর্তমান বাফারের ধারণাটি পরিবর্তন হতে পারে। আমি কেবল এটির চারপাশে দেখতে পাচ্ছি কোডটি আরও জটিল করে তুলবে কেবলমাত্র একটি উইন্ডো আছে কিনা, যদি হ্যাঁ, বর্তমান বাফারকে আবদ্ধ করা, মুছে ফেলা এবং পপিং করা, যদি কোনও নতুন ফ্রেমে কেবল বর্তমান বাফারটি প্রদর্শন করা হয় না। স্বল্পতা কর্মক্ষমতা পরিবর্তন আইএমএইচওর জন্য স্বচ্ছতা হ্রাস মূল্যহীন।
ওয়াসমাস

সুনির্দিষ্টভাবে মৌমাছি না দেওয়ার জন্য @ ওসমাসা দুঃখিত। আমার মনে ছিল (যদি না (ওয়ান-উইন্ডো-পি) না হয় (যাক ...
ম্যাথিয়াস

4
;; Inspired from `mouse-tear-off-window'.
(defun tear-off-window ()
  "Create a new frame displaying buffer of selected window.
    If window is not the only one in frame, then delete it.
    Otherwise, this command effectively clones the frame and window."
  (interactive)
  (let ((owin  (selected-window))
        (buf   (window-buffer))
        (fr    (make-frame)))
    (select-frame fr)
    (switch-to-buffer buf)
    (save-window-excursion 
      (select-window owin)
      (unless (one-window-p) (delete-window owin)))))

এই কমান্ডটি পাশাপাশি নিম্নলিখিতগুলি যা নির্বাচিত উইন্ডোটি তার ফ্রেমে একা থাকলে লাইব্রেরিতে পাওয়া যায় যা কিছুই করে না frame-cmds.el

(defun tear-off-window-if-not-alone ()
  "Move selected window to a new frame, unless it is alone in its frame.
If it is alone, do nothing.  Otherwise, delete it and create a new
frame showing the same buffer."
  (interactive)
  (if (one-window-p 'NOMINI)
      (message "Sole window in frame")
    (tear-off-window)))

এটি এখানে নতুন ফ্রেমে ফোকাস দেয় নি (gnome3.28)। (select-frame-set-input-focus fr)কাজ শেষে যুক্ত হয়েছে।
ওলেজোরেনব

@ এলজোরজেনব: হ্যাঁ, কোনও নতুন তৈরি ফ্রেম ইনপুট ফোকাস পায় কিনা তা আপনার উইন্ডো ম্যানেজারের উপর নির্ভর করতে পারে। হ্যাঁ, আপনার যুক্ত হতে পারে select-frame-set-input-focus। উদাহরণস্বরূপ, এমএস উইন্ডোজে এটি ফোকাস পেয়েছে, সুতরাং এটির প্রয়োজন নেই। এছাড়াও, কমান্ডের বিবরণে ফ্রেমটি কেন্দ্রীভূত হয় তা বলে না। যদি এটি চেয়েছিল তবে একটি আলাদা কমান্ড তৈরি করা যেতে পারে যা এটিকে কল করে এবং তারপরে ফ্রেমকে কেন্দ্র করে।
ড্রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.