পরিবর্তিত হিসাবে ফিল-প্যারা অনুচ্ছেদে চিহ্নিত ফাইলগুলি, যদিও এটি কিছু না করে


11

আমি যখনই কল করি fill-paragraph, বাফারটি সর্বদা পরিবর্তিত হিসাবে চিহ্নিত হয়, এমনকি যদি কমান্ডটির কোনও প্রভাব না থাকে (যেমন অনুচ্ছেদটি ইতিমধ্যে পূরণ করা থাকে)। এটি একটি খালি Undoable ক্রিয়াও তৈরি করে (সহজেই এটি সনাক্ত করা যায় undo-tree-mode)। অন্যান্য কমান্ডগুলি যা পরিবর্তনের সম্ভাবনা রয়েছে যেমন ইনডেন্টেশন কমান্ডগুলি, বাফারকে পরিবর্তিত হিসাবে চিহ্নিত করবেন না বা যদি কিছু পরিবর্তন না করা হয় তবে একটি অযোগ্য অ্যাকশন তৈরি করবেন না। fill-paragraphবাফারকে পরিবর্তিত করে চিহ্নিত করতে এবং কোনও বাস্তবে কিছু পরিবর্তিত হয় তবেই একটি অযোগ্য অ্যাকশন তৈরির কোনও উপায় আছে ?


আমার মনে M-qহয় না এটি সঠিক - অন্তত আমার পরীক্ষা থেকে, ডিফল্টরূপে পরিবর্তিত বাফারটিকে চিহ্নিত করে না। আপনি কোন মোড ব্যবহার করছেন? আমি অনুমান করব মোডটি fill-paragraphকোনও উপায়ে ওভাররাইট হচ্ছে ।
shosti

@ শোস্টি আমি ফান্ডামেন্টাল মোডটি ব্যবহার করছি। অনুচ্ছেদটি এক লাইনের বেশি দীর্ঘ হতে হবে (যখন সঠিকভাবে পূরণ করা হয়)।
লিলি চুং

আহ ঠিক আছে আমি এখন এটি দেখতে।
shosti

উত্তর:


2

নোট করুন যে এটি আরও নতুন ইমাসসেনের জন্য ঠিক করা হয়েছে (v.26 উপরে)।


10

সমস্যাটি হ'ল fill-paragraph(বা বরং fill-region-as-paragraph) আপনার প্যারাগ্রাফটি ভেঙে যাওয়ার সময় নতুন লাইনগুলি সরিয়ে এবং পুনরায় সন্নিবেশ করবে। যদি কেবল একটি লাইন থাকে তবে এটি বাফারকে পরিবর্তন করবে না। আপনি যে পূর্বাবস্থার সাক্ষী তার fill-paragraphঅন-অপশন কেবল নতুন লাইনগুলি সরিয়ে এবং পুনরায় সন্নিবেশ করছে।

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

(defun my/fill-paragraph (&optional justify region)
  (interactive (progn
                 (barf-if-buffer-read-only)
                 (list (if current-prefix-arg 'full) t)))
  (let ((old-text (buffer-string))
        (old-modified (buffer-modified-p))
        (old-undo-list buffer-undo-list))
    (fill-paragraph justify region)
    (when (equal old-text (buffer-string))
      (setq buffer-undo-list old-undo-list)
      (set-buffer-modified-p old-modified))))

আপনি এটি আবদ্ধ করতে পারেন M-q


1
হ্যাঁ, এটি দীর্ঘকাল ধরে ব্যথা হয়ে আসছে। ;-) আমি অবাক হই (আমি মনে করি না) এর জন্য আগে ঠিক করার জন্য অনুরোধ করা হয়েছিল কিনা। মনে হ'ল এটি হত।
ড্রিউ

হুম। আমি ভাবছি যদি এর থেকে আরও ভাল সমাধান থাকে যা পুরো বাফারটি পরীক্ষা করতে না পারে - সম্ভবত এটি কেবলমাত্র নির্বাচিত অনুচ্ছেদটি কোনওভাবে পরীক্ষা করতে পারে?
লিলি চুং

fill-paragraphবিভিন্ন মামলার মধ্যে কিছু পার্থক্য করে, যেমন কোনও সক্রিয় অঞ্চল, বিদ্যমান ফিল-অনুচ্ছেদ ফাংশন ইত্যাদির উপর নির্ভর করে ভিন্নভাবে আচরণ করে etc. বাফারের কোন অংশগুলি আসলে পরিবর্তিত হতে চলেছে তা বোঝার জন্য আপনাকে সেই আচরণের প্রতিলিপি তৈরি করতে হবে। সম্ভব, তবে কৌতূহলপূর্ণ। :-)
জর্জেন শ্যুফার

@ ড্রু গত বছর মেলিং তালিকায় এটি সম্পর্কে দীর্ঘ আলোচনা হয়েছিল: বাগ # 13949: 24.3.50; 'ফিল-প্যারাগ্রাফ'
বাফারটিকে

@ ডকিম: হ্যাঁ, আমার এখন মনে আছে। এবং এর কিছুই কখনও আসে নি ...
ড্র

1

দেরীতে উত্তর, তবে এখানে একটি সহজ সংস্করণ যা টেক্সটটি পরিবর্তন না হলে বাফারকে সংশোধন করে না।

(defun my-fill-paragraph (&optional justify region)
  "Fill paragraph, but don't modify the buffer if filling doesn't
change the text.  See `fill-paragraph' for details."
  (interactive (progn
                 (barf-if-buffer-read-only)
                 (list (if current-prefix-arg 'full) t)))
  (if (buffer-modified-p)
      ;; if modified: use standard fill-paragraph
      (fill-paragraph justify region)
    ;; if unmodified: get a candidate filled version
    (save-excursion
      (let* ((col fill-column)
             (beg (progn (forward-paragraph -1)
                         (skip-syntax-forward " >")
                         (point)))
             (end (progn (forward-paragraph 1)
                         (skip-syntax-backward " >")
                         (point)))
             (old (buffer-substring-no-properties beg end))
             (new (with-temp-buffer
                    (setq fill-column col)
                    (insert old)
                    (fill-paragraph justify region)
                    (buffer-string))))
        ;; don't modify unless the old and new versions differ
        (unless (string-equal old new)
          (delete-region beg end)
          (insert new))))))

এটি @ জর্জেনস্পার এর উত্তরে কিছু ধারণাগুলি গ্রহণ করে তবে কেবলমাত্র বর্তমান অনুচ্ছেদে কাজ করে এবং কেবল একটি সরল, সাদা স্পেস-বিচ্ছিন্ন উপায়ে (হুডের নীচে জটিলতা সম্পর্কে @ জর্জেনশফারের উত্তর সম্পর্কে মন্তব্য দেখুন)।

এটি আমার নিজস্ব উদ্দেশ্যে প্রাসঙ্গিক একমাত্র ব্যবহারের ক্ষেত্রে (যেমন, "সাধারণ" গদ্যের সাথে ইন্টারেক্টিভ ব্যবহার, কোনও সক্রিয় অঞ্চল নয়), তাই যদি কেউ এটি ব্যবহার করতে বা আরও জটিল ব্যবহারের ক্ষেত্রে উন্নতি করতে চায় তবে আমি এটি পোস্ট করছি I'm ।

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