আমার .emacs বা অন্যান্য .el কনফিগারেশন ফাইলটি গঠনের জন্য আমি org- মোড ব্যবহার করতে পারি?


48

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

আমি লক্ষ্য করেছি আমি সক্রিয় করতে পারেন যে org-mode.emacsবাফার এবং এটি শিরোনামে যোগ করতে এবং তাদের পতন সম্ভব যে। তবে আমি যদি org-modeশিরোনাম যুক্ত ( তবে , এক বা একাধিক নক্ষত্র দিয়ে শুরু করা লাইন) ডকুমেন্ট থেকে এলিস্প কোডটি লোড করতে সক্ষম হব তবে কি ইমাসস / অ্যাকোয়াাম্যাক্স ?

আমি কি একটি ফাইলে সমস্ত থাকতে পারি বা আমার একটি .*orgফাইল থাকতে হবে এবং তারপরে নিয়মিত এলিসপ কোডটি অন্য একটি ফাইলে রফতানি করতে হবে?

উত্তর:


46

হ্যাঁ, আপনি অবশ্যই এটি করতে পারেন, আপনি এটি করতে ব্যবহার করতে পারেন org-babel-load-file

আপনার মধ্যে init.el, নিম্নলিখিত লিখুন:

(require 'org)
(org-babel-load-file
 (expand-file-name "settings.org"
                   user-emacs-directory))

(আমি ~ / .emacs.d / settings.org ব্যবহার করছি তবে এটি ব্যক্তিগত পছন্দ)। ইন settings.orgআপনি যে ফাইলটি তবে আপনি চান সাজাতে পারেন, এ elisp মোড়কে:

* Turn off menu bar
#+BEGIN_SRC emacs-lisp
(menu-bar-mode -1)
#+END_SRC

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


1
orgক্লিন ইম্যাকের পরিবর্তে এলপা থেকে সর্বশেষতম লোড করতে আপনি কীভাবে এটি পরিবর্তন করবেন org? মনে হচ্ছে packageআরম্ভের কোডের টেনে বের করা প্রয়োজন হবে settings.orgএবং করা মধ্যে init.el?
mankoff

3
@ মানকফ এটি সঠিক, এটি আমার init.el: (require 'package) (package-initialize) (setq custom-file "~/.emacs.d/custom.el") (when (file-exists-p custom-file) (load custom-file)) (require 'org) (org-babel-load-file (expand-file-name "settings.org" user-emacs-directory))
লি এইচ

2
@mankoff দুঃখিত দরিদ্র ফর্ম্যাটিং জন্য, আমি একটি আরো ভালো পঠনযোগ্য উপরের অংশে সংস্করণ আছে writequit.org/org/settings.html
লি এইচ

2
সাক্ষরিত ইমাকস কনফিগারেশনের কয়েকটিরও বেশি উদাহরণ রয়েছে। সম্ভবত এটি সূচক শুরু করার সময় এসেছে। উদাহরণস্বরূপ github.com/grettke/home
grettke

1
আপনি যদি মেলপায় উপলভ্য org (9) এর সর্বশেষ সংস্করণটি ব্যবহার করতে চান তবে org ফাইলের অভ্যন্তরে org সম্পর্কিত স্টাফ কনফিগার না করার কথা মনে রাখবেন। আমি এই github.com/cescoferraro/dotfiles/blob/master/src/emacs.d/…
CESCO

23

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

আউটলাইন মোড একটি প্রধান মোড এবং একটি ছোটখাট মোড হিসাবে উভয়ই বিদ্যমান। গৌণ মোডটি যে কোনও বড় মোডে ব্যবহার করা যেতে পারে। আপনার প্রোগ্রামের সিনট্যাক্সের সাথে সামঞ্জস্যপূর্ণ শিরোনাম বিন্যাসটি ব্যবহার করতে আপনি এটি কনফিগার করতে পারেন এবং অনেকগুলি মোড মোড তা করে, outline-regexpএকটি শিরোলেখের শুরুর সাথে মিলে যায় এমন একটি রেজিপ্সে ভেরিয়েবল সেট করে । উদাহরণস্বরূপ, এটি ইমাস লিস্প মোডে ডিফল্ট মান:

";;;\\(;* [^ \t\n]\\|###autoload\\)\\|("

অর্থাত্ বিভাগের শিরোনামগুলি তিন বা ততোধিক সেমিকোলন এবং একটি একক স্থান, বা বাম মার্জিনে একটি খোলার প্রথম বন্ধনী দিয়ে শুরু হয়। ভেরিয়েবলটিতে outline-levelশিরোনামের গভীরতা নির্ধারণ করার জন্য একটি ফাংশনের নাম থাকে; ডিফল্ট মান স্ট্রিং দ্বারা মেলানো এর দৈর্ঘ্য হল outline-regexp, এবং এ গিয়ে Emacs পাতার মর্মর মোড এটা অগ্রাহ্য করার জন্য একটি বৃহত্তর গভীরতার দায়িত্ব অর্পণ করা (এবং ;;;###autoload

আপনি যদি ডিফল্ট শিরোলেখ বিন্যাস পছন্দ না outline-regexpকরেন তবে একটি ফাইল স্থানীয় ভেরিয়েবল ঘোষণায় ভেরিয়েবল সেট করুন । এটি আমি ব্যবহার করি - আমার বিভাগের শিরোনামগুলি ;;;তারকাদের ক্লাসিক ক্রম দ্বারা অনুসরণ করে:

;;; Local Variables:
;;; outline-regexp: ";;;\\*+\\|\\`"
;;; End:

আপনি যদি ফাইলটি লোড করার সময় আউটলাইন মাইনর মোডটি স্বয়ংক্রিয়ভাবে চালু করতে চান, স্থানীয় ভেরিয়েবল বিভাগে নিম্নলিখিত লাইনটি যুক্ত করুন - নোট করুন যে এটি আপনাকে ইমাস্যাক্স -23.x এর অনিরাপদ কোড সম্পর্কে সতর্ক করবে।

;;; eval: (outline-minor-mode 1)

আউটলাইন মাইনর মোডের জন্য আদেশগুলি C-c @ডিফল্টরূপে বরং অসুবিধার উপসর্গটি ব্যবহার করে । আমি এটিকে স্থানান্তর করি M-o(আমি কখনই ফেসম্যানু বাইন্ডিং ব্যবহার করি না), আপনি অন্য কীটি পছন্দ করতে পারেন বা অর্গ মোডের বাইন্ডিংগুলি (যা আউটলাইন মোড থেকে বেশ খানিকটা দূরে সরানো হয়েছে ) প্রতিলিপি করতে পারেন।


4
আমিও একমত. Org দুর্দান্ত, তবে এর জন্য আপনার যা দরকার তা হ'ল আউটলাইন-মোড। আপনি যদি এটি আউটশাইন-মোড, আউটআরগ এবং নাভি-মোডের সাথে একত্রিত করেন তবে এটি আরও উন্নত হয়। আউটসাইন এবং আউটরোগের সাথে, সুন্দর org- মোড-স্টাইলের মতামত পেতে আপনার আলাদা আলাদা ফাইলগুলিতে org-babel এবং এর জট ব্যবহার করার দরকার নেই। পাইথন, এলিস্প এবং শেল কোডটি তৈরি করতে এবং রূপরেখায় / আউটসাইনগুলিতে খুব ভালভাবে ভাঁজ করতে আমি যে এলিস্প কোডটি ব্যবহার করি তার একটি সংক্ষেপ এখানে রয়েছে।
blujay

14

সাহিত্যের প্রোগ্রামিং আপনাকে সেখানে সবচেয়ে বেশি নিয়ে যায়, org-মোড এটি org-babel এর মাধ্যমে সমর্থন করে । @ মালাবার্বার ব্লগে দুটি সম্ভাব্য সমাধান ব্যাখ্যা করা হয়েছে :

সবচেয়ে সহজ উপায়টি org- মোড লোড করা, তারপরে একটি সাক্ষর ইমাস কনফিগারেশন লোড করার জন্য এর অবিচ্ছিন্ন বৈশিষ্ট্যটি ব্যবহার করে:

(require 'org)
(org-babel-load-file
 (expand-file-name "emacs-init.org"
                   user-emacs-directory))

বিকল্পভাবে (সম্পূর্ণরূপে org লোড করা এড়ানোর জন্য), ইমাক্স লিস্প আদিমগণের সাথে অবিচলিত কাজ করা যেতে পারে:

(defvar endless/init.org-message-depth 3
  "What depth of init.org headers to message at startup.")

(with-temp-buffer
  (insert-file "~/.emacs.d/init.org")
  (goto-char (point-min))
  (search-forward "\n* init.el")
  (while (not (eobp))
    (forward-line 1)
    (cond
     ;; Report Headers
     ((looking-at
       (format "\\*\\{2,%s\\} +.*$"
               endless/init.org-message-depth))
      (message "%s" (match-string 0)))
     ;; Evaluate Code Blocks
     ((looking-at "^#\\+BEGIN_SRC +emacs-lisp.*$")
      (let ((l (match-end 0)))
        (search-forward "\n#+END_SRC")
        (eval-region l (match-beginning 0))))
     ;; Finish on the next level-1 header
     ((looking-at "^\\* ")
      (goto-char (point-max))))))

6

আউটলাইন-মোডের জন্য আরও একটি ভোট। অর্গানাইজিংয়ের জন্য উদাহরণস্বরূপ .emacsআমি নিম্নলিখিত বাক্য গঠনটি ব্যবহার করি:

;;; HEADING:

গুরুত্বপূর্ণ অংশগুলি হয় ;;;এবং:\n

(add-hook 'emacs-lisp-mode-hook 
          (lambda ()
            (make-local-variable 'outline-regexp)
            (setq outline-regexp "^;;; ")
            (make-local-variable 'outline-heading-end-regexp)
            (setq outline-heading-end-regexp ":\n")
            (outline-minor-mode 1)
            ))

একটি নমুনা এখানে .emacs:

;;; preliminaries:
;; load-path:
;; This little monster adds all non-dot dirs to Your load path recursively
(let* ((my-lisp-dir "~/.emacs.d/site-lisp/")
       (default-directory my-lisp-dir)
       (orig-load-path load-path))
  (setq load-path (cons my-lisp-dir nil))
  (normal-top-level-add-subdirs-to-load-path)
  (nconc load-path orig-load-path))

;; ...

;;; modes:

;; python-mode:
(setq py-install-directory "~/.emacs.d/site-lisp/python-mode")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)

;; ...

;;; customizations:
(custom-set-variables
 '(blink-cursor-mode nil)
)

;; ...

একটি সক্ষম করা উচিত outline-minor-modeএবং তারপরে দুটি প্রয়োজনীয় কী স্ট্রোক হ'ল:

  • C-c @ C-t - শীর্ষ স্তরের কাঠামো দেখান

    উপরের হয়ে যায়

    ;;; preliminaries:
    ;;; modes:
    ;;; customizations:
    
  • C-c @ C-a - সব আবার দেখাও

একটি সাধারণ ব্যবহার হ'ল শীর্ষ স্তরের কাঠামো দেখানো, আগ্রহের শিরোনামে স্থানান্তর করা এবং আবার সবগুলি দেখানো।


1
আমরা সংস্থা-মোড মত নির্দেশনা ব্যবহার করতে পারেন: যেমন #+STARTUP: overviewবা show allবা contentsঅপশন।
ডক্টরেট

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

আমি বোঝাতে চাইছি STARTUPনির্দেশের ভিতরে কোনও বাস্তবায়ন করার উপায় আছে orgstruct-mode, উদাহরণস্বরূপ এটি ছিল একটি আর বাফার কিন্তু একই ধারণা: emacs.stackexchange.com/a/8065/2443
ডক্টরেট

3

নিম্নলিখিত এসও উত্তরে আপনি এটি কীভাবে করবেন তা দেখতে পাবেন, উদাহরণস্বরূপ একটি একক org ফাইল বা অনেকগুলি ব্যবহার করে প্রকল্পগুলি, ক্যাস্ক ব্যবহারের সুবিধা এবং ডকুমেন্টেশনের লিঙ্কগুলি কী।

https://stackoverflow.com/questions/25430029/whats-the-best-way-to-package-my-emacs-installation-packages-and-config-so-tha/25430745#25430745

আমি কয়েক মাস আগে আমার কনফিগারেশনটি org এ পরিণত করেছি এবং আমি এতে সম্পূর্ণ সন্তুষ্ট নই। এটির একটি কার্যকর org ফাইল থাকতে org ম্যানুয়ালটির কিছু কনফিগার এবং পঠন দরকার যা এলিস্প কোডটি সম্পাদনা করা সহজ করে। একজনকে এসআরসি ব্লক ফন্টিফাইজিং সক্ষম করতে হবে (ডিফল্টরূপে -> প্রতি-ফাইলের ভেরিয়েবল ব্যবহার করুন), পরীক্ষা করুন যে অন্যান্য মোডগুলি এসআরসি ব্লকগুলি (স্বতঃপূরণ মোড) সম্পাদনা করার ক্ষেত্রে দ্বন্দ্ব বোধ করে না ইত্যাদি ইত্যাদি সিসি ব্যবহার করতে চায় না (backtick) (org-edit-src-block`) একটি src ব্লক সম্পাদনা করতে। এবং এটি ডিবাগের পথে কিছুটা যায়।

আমার পরামর্শটি হ'ল: আপনার ইআরআই ফাইলটি ছোট এলিস্পের টুকরো টুকরো করে শুরু করুন, কিছু সংকীর্ণ প্যাকেজ চেষ্টা করে দেখুন, helm-swoopদ্রুত নেভিগেশনের জন্য ব্যবহার করুন এবং তারপরে ব্যবহার বিবেচনা করুন org-mode


1

আমি সম্প্রতি এটি করতে কিছু সময় বিনিয়োগ করেছি exactly আমি একটি কনফিগারেশন দিয়ে শেষ করেছি - - org- মোডের সাথে রক্ষণাবেক্ষণ করা হয় - অনুপস্থিত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করতে 'ইউজ-প্যাকেজ' ব্যবহার করে - এটি গিথুব রেপো যা সেই ধরণের অটো-ইনস্টল (নির্লজ্জ প্লাগ: https://github.com / pascalfleury / emacs-config )

আমি রেপো ক্লোনিং করে এবং। / .Emacs এবং voila মধ্যে একটি লাইন যুক্ত করে কয়েকটি মেশিন (লিনাক্স এবং ম্যাক) 'বুটস্ট্র্যাপ' করেছি ' আমার পছন্দ মতো আমি সেটআপ করছি।

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