উইন্ডো বিন্যাসের মধ্যে স্যুইচিং


24

যখন আমি একটি কাস্টম বিন্যাস কনফিগার করব এবং তারপরে কেবলমাত্র একটি ফাইলের পূর্ণস্ক্রিনে অস্থায়ীভাবে নজর রাখা দরকার এবং একবার আমি that লেআউটটি ফিরে চাই it এটির পুনর্বিবেচনার জন্য আমাকে নিজেই প্রয়োজন।

আমি আমার লেআউটগুলি সংরক্ষণ করতে এবং সংরক্ষিত বিন্যাসগুলির মধ্যে স্যুইচ করতে সক্ষম হতে একটি প্লাগইন / এলিস্প কোড চাই।

হালনাগাদ

সবাইকে ধন্যবাদ.

বিজয়ী মোড ব্যবহার করার জন্য আবো-আবো পরামর্শটি সত্যিই দুর্দান্ত এবং আমি এটি শূন্য সময়ে কাজ করতে পেরেছি।

ওয়াসমাস একগুচ্ছ দুর্দান্ত প্লাগিনের পরামর্শ দিয়েছিল যা আমি কখনই শুনিনি এবং রেজিস্টারগুলি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে তথ্য সরবরাহ করি নি।

জর্ডন বিয়নদো আমাকে কীভাবে নিবন্ধগুলি ব্যবহার করবেন তা ব্যাখ্যা করেছিলেন এবং এই জিনিসগুলি আসলে আমি সবচেয়ে সহজ উপায়ে চেয়েছিলাম।

সবাইকে ধন্যবাদ.

উত্তর:


23

এটি করার জন্য অন্তর্নির্মিত নিবন্ধগুলি রয়েছে।

উদাহরণস্বরূপ C-xrwaএকটি রেজিস্টার করতে বর্তমান উইন্ডো কনফিগারেশনটি সংরক্ষণ করতে ব্যবহার করুন ।

তারপরে আপনি C-x1চালনার জন্য অন্তর্নির্মিত ব্যবহার করতে পারেনdelete-other-windows

আপনি একক ফাইলটি দেখার পরে, একটিতে C-xrjaরেজিস্টার্ডে সংরক্ষিত উইন্ডো কনফিগারেশনটিতে ফিরে পপ করতে ব্যবহার করুন ।

সংক্ষেপে:

C-xrwa (রেজিস্টার কনফিগারেশন সংরক্ষণ করুন)

C-x1 (অন্যান্য উইন্ডো মুছুন)

C-xrja (পুনরায় সেভ উইন্ডো কনফিগারেশন)


আমি নিবন্ধগুলি অপ্রয়োজনীয় বলে মনে করি যদিও আমি আমার কনফিগারগুলি পরিচালনা করতে একটি কাস্টম উইন্ডো কনফিগার স্ট্যাক ব্যবহার করি।

আমার দুটি বাইন্ডিং রয়েছে যা বর্তমান কনফিগারেশনটিকে স্ট্যাকের উপরে ঠেলে দেয় এবং উপরের কনফিগারটিকে পপ করে প্রয়োগ করে।

সুতরাং আপনার দৃশ্যে, আমি আমার পুশ বাইন্ডিংটি সম্পাদন করব, তারপরে সিক্স 1, তারপরে আমার পপ বাইন্ডিং সম্পাদন করব।

কোডটি এখানে:

(defvar winstack-stack '()
  "A Stack holding window configurations.
Use `winstack-push' and
`winstack-pop' to modify it.")

(defun winstack-push()
  "Push the current window configuration onto `winstack-stack'."
  (interactive)
  (if (and (window-configuration-p (first winstack-stack))
         (compare-window-configurations (first winstack-stack) (current-window-configuration)))
      (message "Current config already pushed")
    (progn (push (current-window-configuration) winstack-stack)
           (message (concat "pushed " (number-to-string
                                       (length (window-list (selected-frame)))) " frame config")))))

(defun winstack-pop()
  "Pop the last window configuration off `winstack-stack' and apply it."
  (interactive)
  (if (first winstack-stack)
      (progn (set-window-configuration (pop winstack-stack))
             (message "popped"))
    (message "End of window stack")))

এর পরে আপনি আবদ্ধ করতে পারেন winstack-pushভালো কিছু করার জন্য C-cC-u, এবং winstack-popথেকে C-cC-oসহজে প্রায় তিড়িং লাফ করতে।


এটি খুব খুব সুন্দর!
lukas.pukenis

20

আমি ব্যবহার winner-mode। এখানে আমার সেটআপ:

(winner-mode)
(global-set-key [f7] 'winner-undo)
(global-set-key [C-f7] 'winner-redo)
(global-set-key [f9] 'delete-other-windows)
(global-set-key [C-f9] 'delete-window)

কোনও লেআউট বা অন্য কিছু বুকমার্ক করার উপায় আছে কিনা আমি জানি না, তবে পূর্ববর্তী লেআউটে অবিচ্ছিন্নভাবে ফিরে যেতে সক্ষম হওয়া আমার পক্ষে যথেষ্ট।


বাহ, কেবল পূর্ববর্তী লেআউটে ফিরে যেতে সক্ষম হওয়া আমার পক্ষে অনেক কিছু করে। ধন্যবাদ!
lukas.pukenis

11

ইমাক্স আপনার বর্তমান উইন্ডো কনফিগারেশনের মতো ডেটা সংরক্ষণ এবং প্রয়োগের জন্য নিবন্ধগুলি সরবরাহ করে, এটি দিয়ে C-x r wএবং করা যায় C-x r j। তবে আপনার উইন্ডো রেজিস্টারগুলি মনে রাখার প্রয়োজন হওয়ায় এই পদ্ধতিটি অযৌক্তিক হয়।

এটির উন্নতি করার জন্য কয়েকটি প্যাকেজ রয়েছে। iregister এই মৌলিক বৈশিষ্ট্যটিকে আরও পরিদর্শনযোগ্য এবং ইন্টারেক্টিভ করে তোলে। অন্যান্যগুলি আমি রেজিস্টারগুলিকে প্রভাবিত না করে যেমন এটি ব্যবহার করতে সচেতন সেগুলি যেমন এলস্ক্রিন এবং এসক্রিন যা ট্যাবগুলি প্রদর্শনের জন্য শিরোনাম বার ব্যবহার করে। ওয়ার্কগ্রুপস এবং ওয়ার্কগ্রুপ ২ এই সমস্যাটির জন্য দুটি আরও নতুন এবং আরও বিস্তৃত পদ্ধতি। আমি ব্যক্তিগতভাবে উভয়ই পছন্দ করি না এবং তাই আমার নিজের লেখা লিখলাম যা মাঝখানে কোথাও রয়েছে এবং আশা করি কম বাগ এবং জটিলতা রয়েছে।


এটি নিবন্ধগুলির সম্পর্কে দুর্দান্ত জিনিস তবে এই ক্ষেত্রে আমি তাদের কীভাবে ব্যবহার করব? আমার জন্য কোনও সাফল্য আছে কিনা তা দেখতে আপনি তালিকাভুক্ত প্লাগইনগুলি আমি যাচাই করব :)
lukas.pukenis ২

আপনি আপনার বর্তমান লেআউটটিকে একটি রেজিস্টারে সংরক্ষণ করুন, কিছু পরিবর্তন করুন, তারপরে আপনি একবার তার পুরানো অবস্থায় স্যুইচ করতে চাইলে নিবন্ধ থেকে বিন্যাসটি পুনরুদ্ধার করুন। আমি তালিকাভুক্ত প্যাকেজগুলি আপনি যখনই বিন্যাসগুলি স্যুইচ করতে চান তখন এটি করার মানসিক বোঝা থেকে আপনাকে উত্তোলন করে।
wasamasa

প্রারম্ভকালে (আমার .emacs ফাইলটিতে) একটি নির্দিষ্ট উইন্ডো কনফিগারেশন তৈরি করা এবং তারপরে এটি কোনও রেজিস্টারে সংরক্ষণ করা সম্ভব? আমি চেষ্টা (window-configuration-to-register "1")আমার .emacs একটি কমান্ড হিসাবে, কিন্তু এটা কাজ করে নি
অপরাহ্ন

এর জন্য ডেস্কটপ.এল ব্যবহার করে দেখুন, এর আগে ভ্রু ব্রোজের সাথে এটি সফলভাবে একত্রিত হয়েছে।
ওয়াসমাস

2

আপনি বর্তমান উইন্ডো বিন্যাসটি একটি রেজিস্টারে সংরক্ষণ করতে পারেন এবং তারপরে এটি পুনরুদ্ধার করে jump-to-register। কমান্ডটি ডিফল্টরূপে window-configuration-to-registerআবদ্ধ C-x r w

উদাহরণস্বরূপ, যখন আপনি আপনার উইন্ডোগুলি একটি কার্যকর উপায়ে সাজিয়েছেন তখন আপনি এগুলি iব্যবহার করে C-x r w iপুনরায় জমা দেওয়ার জন্য সেভ করতে পারেন : এবং পরে ব্যবহার করে বিন্যাসটি পুনরুদ্ধার করুন C-x r j i


1
হা, আমরা তিনজন একই সাথে নিবন্ধগুলি সম্পর্কে উত্তর দিয়েছি।
গ্লুকাস

1

জাইগস্পোর আপনার একাধিক উইন্ডো খোলা আছে এমন পরিস্থিতিতে একটি দ্রুত সমাধান প্রদান করে এবং অস্থায়ীভাবে সেগুলির মধ্যে একটিকে সর্বোচ্চ করতে চায়। এটি এর আচরণকে পরিবর্তন করে C-x 1। যখন আপনার একাধিক উইন্ডো খোলা থাকে, তখন এটি ডিফল্টের মতো আচরণ করে delete-other-windowsএবং আপনি যা দেখছেন তা বাদ দিয়ে সমস্ত উইন্ডো সরিয়ে দেয় remove আপনি আবার এটি আঘাত করলে, এটি অন্যান্য উইন্ডোজ পুনরুদ্ধার করে।

উইনার-মোড আরও সাধারণ সমাধান সরবরাহ করে তবে ফ্রেমের একক উইন্ডোতে অস্থায়ীভাবে জুম করার জন্য জাইগস্পোর দুর্দান্ত। সবচেয়ে ভাল বিষয় এটি কোনও নতুন কী-বাইন্ডিং ব্যবহার করে না - এটি C-x 1খুব স্বজ্ঞাত উপায়ে পুনরায় সংজ্ঞায়িত করে , তাই নতুন কোন বাইন্ডিং শেখার দরকার নেই।


1

এটি একটি আকর্ষণীয় প্রশ্ন। বেশ কয়েক বছর আগে আমি সমস্ত সমাধানগুলি তদন্ত করেছিলাম। কেবলমাত্র ওয়ার্কগ্রুপস 2.el ভারী ওজনযুক্ত যা সমস্ত কোণার কেসগুলি কভার করতে পারে।

তবে ওয়ার্কগ্রুপ 2 ইউআই একটি বিপর্যয়। উদাহরণস্বরূপ, আপনি যদি ওয়ার্কগ্রুপ-মোড সক্ষম করেন (যেমন এর README প্রস্তাবিত), পূর্ববর্তী লেআউটটি স্বয়ংক্রিয়ভাবে ইমাক্স শুরু হওয়ার সময় লোড হবে। এটি প্রতিটি সময় খুব ধীর গতির সূচনা করে।

আমার সমাধানটি হ'ল ওয়ার্কগ্রুপস 2 কে এপিআই এর সংগ্রহ হিসাবে বাক্সের বাইরে ব্যবহারযোগ্য একটি সরঞ্জাম হিসাবে সংগ্রহ করা। সুতরাং আমি @ abo-abo থেকে আইভি-মোড ( https://github.com/abo-abo/swiper ) ব্যবহার করে এর ডিফল্ট UI মিথস্ক্রিয়া পরিবর্তন করেছি

এখানে চিত্র বর্ণনা লিখুন

পূর্ণ উইন্ডো টগল করা সহজ, উইনার-মোড থেকে API গুলিই যথেষ্ট enough

এখানে সম্পূর্ণ কোড (আমি শুধুমাত্র ব্যবহার করা হয় M-x toggle-full-window, M-x wg-create-workgroupএবং M-x my-wg-switch-workgroup, এছাড়াও আপনি যেমন আমি উপরের উল্লেখ করা হয়েছে, swiper ইনস্টল করার প্রয়োজন),

(defun toggle-full-window()
  "Toggle the full view of selected window"
  (interactive)
  ;; @see http://www.gnu.org/software/emacs/manual/html_node/elisp/Splitting-Windows.html
  (if (window-parent)
      (delete-other-windows)
    (winner-undo)))

(setq wg-use-default-session-file nil)
;; don't open last workgroup automatically in `wg-open-session',
;; I only want to check available workgroups! Nothing more.
(setq wg-load-last-workgroup nil)
(setq wg-open-this-wg nil)

;(workgroups-mode 1) ; put this one at the bottom of .emacs
;; by default, the sessions are saved in "~/.emacs_workgroups"
(autoload 'wg-create-workgroup "workgroups2" nil t)

(defun my-wg-switch-workgroup ()
  (interactive)
  (let (group-names selected-group)
    (unless (featurep 'workgroups2)
      (require 'workgroups2))
    (setq group-names
          (mapcar (lambda (group)
                    ;; re-shape list for the ivy-read
                    (cons (wg-workgroup-name group) group))
                  (wg-session-workgroup-list (read (f-read-text (file-truename wg-session-file))))))
    (ivy-read "work groups" group-names
              :action (lambda (group)
                        (wg-find-session-file wg-default-session-file)
                        (wg-switch-to-workgroup group)))))

(eval-after-load 'workgroups2
  '(progn
     ;; make sure wg-create-workgroup always success
     (defadvice wg-create-workgroup (around wg-create-workgroup-hack activate)
       (unless (file-exists-p (wg-get-session-file))
         (wg-reset t)
         (wg-save-session t))

       (unless wg-current-session
         ;; code extracted from `wg-open-session'.
         ;; open session but do NOT load any workgroup.
         (let ((session (read (f-read-text (file-truename wg-session-file)))))
           (setf (wg-session-file-name session) wg-session-file)
           (wg-reset-internal (wg-unpickel-session-parameters session))))
       ad-do-it
       ;; save the session file in real time
       (wg-save-session t))

     (defadvice wg-reset (after wg-reset-hack activate)
       (wg-save-session t))

     ;; I'm fine to to override the original workgroup
     (defadvice wg-unique-workgroup-name-p (around wg-unique-workgroup-name-p-hack activate)
       (setq ad-return-value t))))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.