সামগ্রীর গতিশীল সারণী হিসাবে আমি কীভাবে দ্বিতীয় বাফারে একটি org- মোডের রূপরেখা পেতে পারি?


25

আমি যখন বড় দস্তাবেজগুলি সম্পাদনা করি, তখন আমি আলাদা বাফারে রূপরেখা (নন-সামগ্রী সহ) দেখে আমি কোথায় আছি তা দেখতে চাই। আপনি যখন কোনও পিডিএফ ফাইল পড়েন তখন বামদিকে একটি টিওসি থাকে। (নিচে দেখ)

Org- মোডে রূপরেখা প্রসারিত / পতন সম্ভব। তবে বামে (বা ডানদিকে) একটি পৃথক বাফারে স্থির রূপরেখা থাকা কি সম্ভব যাতে আপনি শিরোনামগুলিতে ক্লিক করেন, তখন অন্য বাফার সেই অবস্থানে চলে যায়?

Org- মোডের জন্য কিন্ডা কি পছন্দ? এখানে চিত্র বর্ণনা লিখুন

[সম্পাদনা]
দ্য clone-indirect-bufferখুব আমি কি চাই কাছাকাছি। ধাঁধাটির অনুপস্থিত অংশটি শিরোনাম / (বা যে কোনও পয়েন্ট সত্যই) ক্লিক করার সময় একই স্থানে যেতে হবে।

এর জন্য আমি কিছু কোড লেখার চেষ্টা করেছি: অন্যান্য ক্লোনযুক্ত বাফারকে একই পয়েন্টে নিয়ে যেতে চান? (অপ্রত্যক্ষ বাফারগুলির সিঙ্ক পজিশন) (org- মোড)

তবে বিষয়বস্তু ধসে পড়লে এটি কাজ করে না। যদি এটি কাজ করে নেওয়া যায়, তবে ক্লোন-অনির্দিষ্ট-বাফার এটির একটি সম্পূর্ণ সমাধান।

[সম্পাদনা 2 সমাধান]
উপরের লিঙ্কে এবং নীচের উত্তরে থাকা কোড পিছন দিকে জাম্পিংয়ের সমাধান করার জন্য নিসলেকে একত্রিত করে।

;first call 'clone-indirect-buffer'. Then...

;This function works between buffer and it's clone.
(defun my/goto-same-spot-in-other-buffer () 
  "Go to the same location in the other buffer. Useful for when you have cloned indirect buffers"
  (interactive)
  (let ((my/goto-current-point (point)))
       (other-window 1)
       (goto-char my/goto-current-point)
       (when (invisible-p (point))
        (org-reveal)))
)

;This function is a clone-to-buffer jump only:
; It does find the other buffer first thou instead of just jumping to the other 
; window as does the function above.
(defun my/jump-to-point-and-show ()
  "Switch to a cloned buffer's base buffer and move point to the
cursor position in the clone."
  (interactive)
  (let ((buf (buffer-base-buffer)))
    (unless buf
      (error "You need to be in a cloned buffer!"))
    (let ((pos (point))
          (win (car (get-buffer-window-list buf))))
      (if win
          (select-window win)
        (other-window 1)
        (switch-to-buffer buf))
      (goto-char pos)
      (when (invisible-p (point))
        (show-branches)))))


(global-set-key (kbd "<s-mouse-1>") 'my/goto-same-spot-in-other-buffer)
(global-set-key (kbd "s-m") 'my/goto-same-spot-in-other-buffer)
(global-set-key (kbd "<C-s-mouse-1>") 'my/jump-to-point-and-show)
(global-set-key (kbd "C-s-m") 'my/jump-to-point-and-show)

2
হতে পারে চেষ্টা করুন C-c C-x b, বা org-tree-to-indirect-buffer
স্যামুয়েল ফ্লিন্ট

@ এসডাব্লুফ্লিন্ট একটি সংক্ষিপ্ত পরীক্ষার পরে, দেখে মনে হচ্ছে এটি ওপি যা চায় তার থেকে কিছু আলাদা করে: এটি বর্তমান সাবট্রিকে একটি পরোক্ষ বাফারে অনুলিপি করে। আমাদের যা দরকার তা একটি org-sparse-tree-to-indirect-bufferফাংশন হতে পারে , উদাহরণস্বরূপ, তবে এটি বিদ্যমান বলে মনে হয় না।
টি ভেররন

আরও কিছুক্ষন দেখার পরে, org-panes
স্যামুয়েল ফ্লিন্ট

আমি মনে করি এটিও আইমেনু-তালিকার উল্লেখযোগ্য । এটিতে কিছু প্রয়োজনীয়তার অভাব রয়েছে তবে অন্যকে সম্বোধন করে।
ভাস্বরত্ববিদ

org-ট্রি-থেকে-অপ্রত্যক্ষ-বাফার দুর্দান্ত।
নিনরোড

উত্তর:


9

কয়েকটি বিকল্প মাথায় আসে। প্রথম দুটি speedbarহ'ল, যা অভিযোগের সাথে ভাল খেলেছে org-modeএবং minimapযদিও আমি সেগুলি ব্যবহার করি নি তাই ব্যক্তিগতভাবে তাদের পক্ষে প্রত্যাশা করতে পারি না।

সবচেয়ে সহজ বিকল্পটি (এবং সবচেয়ে নমনীয়ও) হতে পারে, পরোক্ষ বাফার ব্যবহার করা হবে ।

অনুশীলনে, আপনি যে orgবাফারটির জন্য একটি বাহ্যরেখা চান, হিট করুন M-x clone-indirect-buffer( C-u M-x clone-indirect-bufferক্লোনটি কী বলা হয় তা আপনি নিয়ন্ত্রণ করতে চান তবে ব্যবহার করুন ) এবং তারপরে বুম করুন, আপনার ব্যবহারের জন্য বাফারের আরও একটি অনুলিপি রয়েছে। আসল বাফারটির সাহায্যে সেই ক্লোনটি একটি উইন্ডোতে বা ফ্রেমে পাশাপাশি রাখুন এবং ক্লোনটিতে আপনার স্বাদে রূপরেখা সামঞ্জস্য করুন।

আপনি উল্লেখ করেছেন "কার্যরেখায় শিরোনামে ক্লিক করুন" কার্যকারিতা এটি আপনাকে পায় না, তবে আপনাকে সাইডবারের স্পিরিট দেয়।

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

(defun jump-to-point-and-show ()
  "Switch to a cloned buffer's base buffer and move point to the
cursor position in the clone."
  (interactive)
  (let ((buf (buffer-base-buffer)))
    (unless buf
      (error "You need to be in a cloned buffer!"))
    (let ((pos (point))
          (win (car (get-buffer-window-list buf))))
      (if win
          (select-window win)
        (other-window 1)
        (switch-to-buffer buf))
      (goto-char pos)
      (when (invisible-p (point))
        (show-branches)))))

আমি স্পিডবার / এসআর-স্পিডবার চেষ্টা করেছিলাম। এটি খুব সুন্দর তবে এটি কেবল প্রথম 2 টি স্তর দেখায়। আমি এখানে জিজ্ঞাসা করেছি যে এখানে আরও মাত্রা থাকা সম্ভব কিনা: emacs.stackexchange.com/questions/9533/… পরোক্ষ বাফার একটি দুর্দান্ত বিকল্প। আমি আশ্চর্য হয়েছি যে অন্যভাবে বাফারটিতে কার্সারটিকে ক্লোন করা বাফারের মতো একই অবস্থানে নিয়ে যাওয়া সম্ভব কিনা ..
লিও উফিমটসেভ

আমি কোডটি লেখার চেষ্টা করেছি যা অন্য বাফারে একই জায়গায় চলে যাবে, তবে সমস্ত কিছু প্রসারিত হলে কেবল এটি কার্যকর হয়। যদি এটি এমনভাবে কাজ করা যায় যাতে এটি স্বয়ংক্রিয়ভাবে প্রসারিত হয় তবে ক্লোন-বাফার একটি উপযুক্ত সমাধান। পোস্ট: emacs.stackexchange.com/questions/9536/…
লিও

উপরের কোড স্নিপেট জন্য আপনাকে ধন্যবাদ। অনেক প্রশংসিত appreciated _ ^।
লিও উফিম্টসেভ

16

কীভাবে: M-x occur RET ^*+ RET(দ্রষ্টব্য যে রেজিপেক্সের শেষে একটি স্থান রয়েছে)।


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

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

এটি উজ্জ্বল করতে চলেছে কারণ এর দুর্দান্ত, সহজ এবং দক্ষ
গাম্বো

খুবই সোজা. কত চালাক. তাই হ্যাকিশ। খুবই সুন্দর.
ডাঙম

7

ড্যানের উত্তর এবং এর ভিত্তিতে আপনার সমাধান পড়ার পরে, আমি এটি একসাথে রেখেছি। এটি বর্তমান বাফারের বামে একটি নতুন, সংকীর্ণ, কেবলমাত্র পঠনযোগ্য ক্লোনটি খুলবে এবং এটি বেস বাফারের সেই অবস্থানে যেতে ক্লোনটিতে <mouse-1>এবং RETস্থানীয়ভাবে আবদ্ধ ।

(defun my/open-tree-view ()
  "Open a clone of the current buffer to the left, resize it to 30 columns, and bind <mouse-1> to jump to the same position in the base buffer."
  (interactive)
  (let ((new-buffer-name (concat "<tree>" (buffer-name))))
    ;; Create tree buffer
    (split-window-right 30)
    (if (get-buffer new-buffer-name)
        (switch-to-buffer new-buffer-name)  ; Use existing tree buffer
      ;; Make new tree buffer
      (progn  (clone-indirect-buffer new-buffer-name nil t)
              (switch-to-buffer new-buffer-name)
              (read-only-mode)
              (hide-body)
              (toggle-truncate-lines)

              ;; Do this twice in case the point is in a hidden line
              (dotimes (_ 2 (forward-line 0)))

              ;; Map keys
              (use-local-map (copy-keymap outline-mode-map))
              (local-set-key (kbd "q") 'delete-window)
              (mapc (lambda (key) (local-set-key (kbd key) 'my/jump-to-point-and-show))
                    '("<mouse-1>" "RET"))))))

(defun my/jump-to-point-and-show ()
  "Switch to a cloned buffer's base buffer and move point to the cursor position in the clone."
  (interactive)
  (let ((buf (buffer-base-buffer)))
    (unless buf
      (error "You need to be in a cloned buffer!"))
    (let ((pos (point))
          (win (car (get-buffer-window-list buf))))
      (if win
          (select-window win)
        (other-window 1)
        (switch-to-buffer buf))
      (goto-char pos)
      (when (invisible-p (point))
        (show-branches)))))

এটি এর সাথে outline-modeএবং outline-minor-modeসেই সাথে মোডগুলিও কার্যকর করবে যেমন যেমন org-mode। স্থানীয় কী মানচিত্র পাওয়ার বিষয়ে আমি কিছু তথ্য পেয়েছি , তবে কোনটি অনুলিপি করতে হবে তা কীভাবে চয়ন করব তা আমি জানি না। এই পৃষ্ঠাটিতে এমনও রয়েছে যা বাফার-স্থানীয় কীগুলি সেট করার জন্য বাফর-নির্দিষ্ট ছোটখাট মোডগুলি স্বয়ংক্রিয়ভাবে তৈরি করার জন্য একটি ফাংশন রয়েছে, তবে এটি এই ইস্যুটির বাইরে সুযোগের বাইরে বলে মনে হচ্ছে।


1
এই ভাগ করার জন্য আপনাকে ধন্যবাদ। ব্যবহারের outline-mode-mapপরিবর্তে org-mode-mapআমি পরিচালিত এটা জন্য কাজ করতে AUCTeXদিয়ে outline-minor-modeযা সুন্দর।
ওলেগ দোমানভ

যাইহোক, outline-modeএর ফাংশন hide-bodyশিরোনামগুলি বাদ দিয়ে সবকিছু আড়াল করে।
ওলেগ ডোমানভ

@ ওলেগডোমানভ এই তথ্যের জন্য ধন্যবাদ! আমি কোডটি ব্যবহার করার জন্য outline-mode-mapএবং আরও hide-bodyকয়েকটি ছোট ছোট উন্নতি করেছি।
blujay

2

অবশেষে, এটি প্যাকেজে প্রয়োগ করা হয়েছে org-sidebar:

org- সাইডবার-ট্রি ডেমো


1
Hoooray! আমার একটি শেকি সেটআপ রয়েছে যা মাঝে মধ্যে কেবল কাজ করা বন্ধ করে দেয়, এটি এখন প্যাকেজ হলে একেবারেই ব্রিলিয়ান্ট!

0

একটি নন-প্রোগ্রামার যিনি পাঠ্য সম্পাদকের জন্য অ্যাকোম্যাক ব্যবহার করতে পছন্দ করেন তাদের কাছ থেকে দুটি কম ভাড়ার পরামর্শ (আমি কী করি):

  1. ইন-বাফার কমান্ডগুলির সাহায্যে পিছনে এবং সামনে টগল করুন:

স্টার্টআপ: ইনডেন্ট (জলপ্রপাতের প্রকারের রূপরেখাটি দেখতে পুরোপুরি সহজ)

এটি বাফারটি ট্যাব চালিত দেখার জন্য

এবং

+ বিকল্পগুলি: এইচ: এন, যেখানে এন = = আপনি এইচটিএমএল রফতানিতে দেখতে চান এমন স্তরের সংখ্যা, যা পরামর্শ # 2

দেখুন: https://emacsclub.github.io/html/org_tutorial.html

  1. টিওসি দেখতে এইচটিএমএল (সিসি সিইএইচ এইচ) হিসাবে রফতানি করুন। আমি সহজেই এইচটিএমএল বা পাঠ্যের টেক্সট আউটপুট (সিসি সিই ট্যা) পেতে পারেন এমন কেউ খুঁজে পাচ্ছি না

0

আমার অনুরূপ কিছু দরকার ছিল, তাই আমি একসাথে outline-tocমোড রেখেছি । এটি org- মোড ডক্সের জন্য কাজ করা উচিত।

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