ইমাক্সের জন্য কোনও স্ব-সারিবদ্ধ প্যাকেজ বা মোড আছে কি?


15

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

# M-x align-regexp "=>" will line everything up nicely 
file { "/etc/foo":
  ensure => present,
  mode => "0666",
  source => "puppet:///modules/example/foo",
}

তবে আমি সত্যিই যা চাই তা হ'ল ফ্লাইটে এমনটি ঘটে - কোনও অঞ্চল বা পুরো বাফার নির্বাচন না করেই। এমন কোনও প্যাকেজ বা মোড রয়েছে যা এটি করবে বা এটি এমন কিছু যা আমি আগ্রহী সেই মোডে তৈরি করতে হবে?

সম্পাদনা: আমি পুতুল এবং সিএফইঙ্গাইন সম্পর্কে জিজ্ঞাসা করেছি, যেহেতু আজকাল বেশিরভাগ ক্ষেত্রেই আমি কোড করি এবং প্রান্তিক পাঠ্যের জন্য আমার দৃ strong় পছন্দ রয়েছে have তবে, আমি জানতে আগ্রহী ছিলাম (এবং এটিকে ভালভাবে প্রকাশও করিনি) অন-ফ্লাই অ্যালাইনমেন্ট এমন কোনও বৈশিষ্ট্য যা ইমাস মোডগুলিতে প্রচলিত (মূলত প্রোগ্রামিং ভাষাগুলির মোডে), অথবা যদি বেশিরভাগ লোক সংরক্ষণ করার সময় বা কোনও কিছুতে সারিবদ্ধ হয় অন্য বিষয়।


এখানে প্রসারিত অঞ্চল রয়েছে , যা ক্রমান্বয়ে বড় স্কোপগুলি নির্বাচন করার জন্য কার্যকর।

1
আপনি সাধারণত কীভাবে সারিবদ্ধ হন সে সম্পর্কে আপনি আরও বর্ণনা করতে পারেন? এটি কি কেবল সমান লক্ষণ এবং পুতুল-মোডে? আপনি যা চান তা পেতে এই মাল্যাকবাবার দ্বারা স্বয়ংক্রিয় ইন্ডেন্টেশনের জন্য ইমাস এসই উত্তরের কোডটিতে আপনি সংশোধন করতে পারেন। কেবলমাত্র প্রতিস্থাপন indent-regionসঙ্গে align-to-equalsএবং এই ফাংশন হিসাবে সংজ্ঞায়িত (defun align-to-equals (begin end) (interactive "r") (align-regexp begin end "\\(\\s-*\\)=" 1 1 nil)); এবং emacs-lisp-mode-hookসাথে puppet-mode-hook
দক্ষ মোদী

উত্তর:


5

আপনি যদি অটো-অ্যালাইনমেন্টের জন্য কোনও অঞ্চল চিহ্নিত করতে চান তবে এর মতো কিছু করা সম্ভবত খুব কঠিন নয়:

(require 'cl-lib)

(defvar my--auto-align-overlays nil)
(make-variable-buffer-local 'my--auto-align-overlays)

(defun my-auto-align (beg end regexp)
  (interactive "r\nsRegexp: ")
  (let ((ol (make-overlay beg end)))
    (overlay-put ol 'evaporate t)
    (overlay-put ol 'my--auto-align-regexp regexp)
    (overlay-put ol 'modification-hooks '(my--auto-align-function))
    (push ol my--auto-align-overlays)
    (add-hook 'post-command-hook 'my--auto-align-pch nil t)))

(defun my--auto-align-function (ol &rest _args)
  (cl-pushnew ol my--auto-align-overlays)
  (add-hook 'post-command-hook 'my--auto-align-pch nil t))

(defun my--auto-align-pch ()
  (dolist (ol my--auto-align-overlays)
    (align-regexp (overlay-start ol) (overlay-end ol)
                  (concat "\\(\\s-*\\)" (overlay-get ol 'my--auto-align-regexp))
                  1 align-default-spacing))
  (setq my--auto-align-overlays nil)
  (remove-hook 'post-command-hook 'my--auto-align-pch))

তবে আপনি যদি এটি পুরোপুরি স্বয়ংক্রিয় হয়ে উঠতে চান তবে আপনি কোন অঞ্চলগুলিকে স্বয়ংক্রিয়ভাবে সারিবদ্ধ করতে চান (এবং কোন রেজিএক্সএক্সের সাথে) যা আরও বেশি কঠিন তা চিহ্নিত করার একটি উপায় খুঁজে বের করতে হবে। আমি অনুমান করি আপনি কিছু রিজেক্সপ্স সরবরাহ করতে পারেন, এবং তারপরে এই রেজেক্স্পগুলির সাথে মেলে একটানা রেখার জন্য বাফারটি স্ক্যান করুন।


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

2
@ সেন্টআর্দ্বার্কার্থে কার্পেটযুক্ত ওভারলেগুলি সাধারণত চেহারা পরিবর্তন করতে ব্যবহৃত হয়, তবে তাদের প্রয়োগযোগ্যতা এর বাইরে চলে যায়। এই উত্তরে (আইআইইউসি), ওভারলেগুলি এমন অঞ্চলগুলিকে চিহ্নিত করতে ব্যবহৃত হয় যা প্রান্তিককরণ করতে হবে (সুতরাং বাফারটি সত্যই পরিবর্তিত হবে, কেবল উপস্থিতি নয়)। ফাংশনটি my-auto-alignএই ওভারলেগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয় (আপনি যে অঞ্চলগুলিকে প্রান্তিককরণ করতে চান তা চিহ্নিত করুন)। স্টিফান এই সমস্ত সমস্যার মধ্য দিয়ে যাবার কারণটি হ'ল (ইন্ডেন্টেশনের বিপরীতে) আপনি যদি কেবলমাত্র পুরো বাফারটিকে সারিবদ্ধ করার চেষ্টা করেন তবে আপনি অনাকাঙ্ক্ষিত ফলাফল পাবেন, সুতরাং আপনাকে একবারে টুকরোগুলি প্রান্তিককরণ করতে হবে।
মালবারবা

3

পুতুল মোড সরবরাহ করে puppet-align-block। আপনি এই ফাংশনটি স্বয়ংক্রিয়ভাবে কল করার ব্যবস্থা করতে পারেন, উদাহরণস্বরূপ এটিকে post-command-hookস্থানীয়ভাবে (অচিহ্নিত) যুক্ত করে:

(defun puppet-auto-align ()
  (unless (puppet-in-string-or-comment-p)
    (puppet-align-block)))

(define-minor-mode puppet-auto-align-mode
  :init-value nil
  :keymap nil
  :lighter "PAl"
  :group 'puppet-lint
  (if puppet-auto-align-mode
      (add-hook 'post-command-hook #'puppet-auto-align nil 'local)
    (remove-hook 'post-command-hook #'puppet-auto-align 'local)))

(add-hook 'puppet-mode-hook #'puppet-auto-align-mode)

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

সুতরাং Pu পুতুল মোড রক্ষণাবেক্ষণকারী হিসাবে কথা বলছি against আমি এর বিরুদ্ধে প্রস্তাব দিচ্ছি, এবং আপনি এই কোডটি ব্যবহার করে থাকলে আমরা আপনাকে সহায়তা করতে বা বাগের প্রতিবেদনগুলি গ্রহণ করতে সহায়তা করব না।

এছাড়াও, বৃহত সংস্থানগুলি ব্লকগুলির জন্য, এটি ধীর হতে পারে, তাই আপনি সম্ভবত post-command-hookসরাসরি পরিবর্তে অলস টাইমার ব্যবহার করতে চান ।

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