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


18

বলুন, আমার কাছে এর মতো কিছু কোড রয়েছে:

(defun some-function ()
  (interactive)
  ;; do something
  )

এখন আমি some-functionকেবল বাফারে নির্বাচিত অঞ্চলে কাজ করতে চাই ? আমি এটা কিভাবে করবো ? এছাড়াও, আমি যদি কিছু অঞ্চল বেছে নিয়েছি এবং যদি আমি না নির্বাচিত না করি তবে কিছু করার জন্য দুটি আলাদা কোডের পথ থাকতে পারে?

উত্তর:


22
(defun some-function (beginning end)
  (interactive "r")
  (if (use-region-p)
      (message "The region is active, and is from %d to %d" beginning end)
    (message "The region is still there (from % d to %d), but it is inactive" 
             beginning end)))

ব্যবহারের (interactive "r")মানে যে পরামিতি beginningএবং endস্বয়ংক্রিয়ভাবে অঞ্চল শুরুতে এবং অঞ্চলের সমাপ্তি মান পাবেন যথাক্রমে, ফাংশন প্রার্থনা যখন। (আপনি যথাক্রমে ফাংশন ব্যবহার করে region-beginningএবং region-endযথাক্রমে সেই মানগুলি পেতে পারেন ))

অঞ্চলটি সর্বদা উপস্থিত থাকে (যদি বর্তমান বাফারটিতে কোনও চিহ্ন থাকে) তবে আপনি সম্ভবত এটি ভাববেন না। অঞ্চলটি সক্রিয় যখন এটি হাইলাইট করা হয় (পাঠ্য নির্বাচিত হয়)। অঞ্চলটি প্রাকটিকেট ব্যবহার করে সক্রিয় কিনা তা আপনি পরীক্ষা করতে পারেন region-active-p। তবে আরও ভাল পরীক্ষাটি সাধারণত হয় use-region-p, কারণ (পূর্বনির্ধারিতভাবে) nilঅঞ্চলটি সক্রিয় এবং অযৌক্তিকভাবে উভয় (বিন্দু এবং চিহ্ন পৃথক) হলেই এটি সত্য (অ- ) প্রত্যাবর্তন করে ।

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

এটি ভবিষ্যদ্বাণীকের সংজ্ঞাটি দেখতে সহায়ক use-region-p:

(defun use-region-p ()
  (and (region-active-p)
       (or use-empty-active-region
           (> (region-end) (region-beginning)))))

use-empty-active-regionএকটি ব্যবহারকারীর বিকল্প, যার ডিফল্ট মান nil(সত্য), অর্থ use-region-pঅঞ্চলটি খালি থাকলে ডিফল্টরূপে সত্য হয় না। সেক্ষেত্রে, এটি সত্যে ফিরে আসার জন্য, অঞ্চলের শেষটি অবশ্যই শুরুর চেয়ে বড় হতে হবে (আমি উপরে বর্ণিত আচরণ)।

এবং যদি আমরা এর সংজ্ঞাটি দেখি region-active-p:

(defun region-active-p ()
  (and transient-mark-mode
       mark-active
       (mark)))

আমরা দেখতে পাচ্ছি যে এটিগুলি সত্য (অ- nil) প্রত্যাবর্তন করে যখন এগুলি সমস্ত সত্য হয়:

  • transient-mark-mode চালু আছে
  • চিহ্নটি সক্রিয় ( mark-active)।
  • বর্তমান বাফারে একটি চিহ্ন রয়েছে।

সক্রিয় হওয়ার চিহ্নটি এই অঞ্চলটি সক্রিয় হওয়া সম্পর্কেই সত্য। এটি যখন সক্রিয় থাকে তখন ধরে নিই যে transient-mark-modeএটি চালু আছে এবং বর্তমান বাফারে একটি চিহ্ন রয়েছে, অঞ্চলটি হাইলাইট করা হবে।


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

1
@ অ্যান্ড্রিআরহেলার: না ope C-SPC M-: mark-active=> টি। আপনার অবশ্যই একটি খালি অঞ্চল থাকতে পারে যা তবুও সক্রিয়।
ড্র হয়েছে

ঠিক আছে, ধন্যবাদ. তবুও মনে করুন চিহ্ন-সক্রিয় এবং অঞ্চল-সক্রিয়-পি - বৃহত্তর শূন্য প্রসারিত হিসাবে নির্ধারিত - সমস্ত হওয়া উচিত।
Andreas Röhler
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.