বিন্দুটি কোনও মন্তব্য অঞ্চলে থাকলে কীভাবে সনাক্ত করবেন?


15

বিন্দুটি কোনও মন্তব্য অঞ্চলে থাকলে কীভাবে সনাক্ত করবেন?

উত্তর:


19

প্রদত্ত তালিকার চতুর্থ * মানটি পরীক্ষা করুন syntax-ppss:

(nth 4 (syntax-ppss))

এটি nilযদি বিন্দুতে কোনও মন্তব্যের বাইরে থাকে, tযদি কোনও নাস্তেয় মন্তব্যের ভিতরে না থাকে, বা কোনও নেস্টেবল মন্তব্যের ভিতরে কোনও পূর্ণসংখ্যার (নীড়ের গভীরতা) থাকে। parse-partial-sexpআরও তথ্যের জন্য ডকাস্ট্রিং দেখুন ।

* জিরো-ভিত্তিক

নোট করুন যে এটি অর্গ-মোডের সাথে কাজ করে না, আপনার এটি ব্যবহার করা উচিত:

(defun in-comment-p ()
  "Testy if cursor/point in a commented line?"
  (save-excursion
        (if (derived-mode-p 'org-mode)
                (save-match-data (beginning-of-line) (looking-at "^[ \t]*#"))
          (nth 4 (syntax-ppss)))))

পারফেক্ট, অন্যান্য সমস্ত তথ্যের জন্য একটি ডকুমেন্টেশন আছে যা syntax-ppssসরবরাহ করে?
নাম

2
হ্যাঁ, এটি ডক্টরসিংয়ের জন্য parse-partial-sexp
লেগোসিয়া

2
@ নাম: এর জন্য দস্তাবেজ syntax-ppssআপনাকে নির্দেশ করবে parse-partial-sexp, এর পরেরটি আপনাকে এই ফাংশনগুলি দিয়ে ফিরে আসা সমস্ত সামগ্রীর বিবরণ দেবে। আশা করি এটি একটি সূচনার জন্য সহায়তা করে।
ড্যান

1
ইমাস লিসপ ম্যানুয়ালে 34.6 বিভাগ "পার্সিং এক্সপ্রেশনগুলি" দেখুন।
মামলা ডি নিম্মে

7

হরফ-মুখ ব্যবহার করুন, এই কৌশলটি আমি ফ্লাইস্পেল থেকে শিখেছি।

আমি syntax-ppssদুই বছর আগে চেষ্টা করেছি , এটি দুটি কারণে কার্যকর হয় না:

  • মন্তব্যের প্রান্তে (মন্তব্য সীমা) কাজ করবেন না, উদাহরণস্বরূপ, // this is commentসি ++ - মোডের মতো মন্তব্যের জন্য , আপনি যদি কার্টরটির উপরে কার্সার রাখেন /তবে ফলাফলটি (nth 4 (syntax-ppss))শূন্য হবে।

  • ওয়েব-মোডের মতো মেজর-মোডে মোটেও কাজ করে না

আমি ফ্লাইস্পেল থেকে অনুলিপি করা কোডটি এখানে:

(defun evilnc--in-comment-p (&optional pos)
  "Test if character at POS is comment.  If POS is nil, character at `(point)' is tested"
  (interactive)
  (unless pos (setq pos (point)))
  (let* ((fontfaces (get-text-property pos 'face)))
    (when (not (listp fontfaces))
      (setf fontfaces (list fontfaces)))
    (delq nil
          (mapcar #'(lambda (f)
                      ;; learn this trick from flyspell
                      (or (eq f 'font-lock-comment-face)
                          (eq f 'font-lock-comment-delimiter-face)))
                  fontfaces))))

দয়া করে নোট করুন কোডটি বড় বড় ফ্যাডের মুখের সাথে মিলে মোডগুলিকে সমর্থন করার জন্য বাড়ানো যেতে পারে।

আমি প্রায় তিন বছর ব্যর্থতা ছাড়াই এই কৌশলটি ব্যবহার করেছি। তদ্ব্যতীত, ফ্লাইস্পেল বিবেচনা করে এত দিন ধরে ব্যাপকভাবে ব্যবহৃত হয়, আমি দাবি করতে পারি যে এই পদ্ধতিটি নির্ভরযোগ্য।

অনুরূপ প্রশ্নের জন্য স্ট্রিংটি নেভিগেট করার জন্য কোন কীবোর্ড শর্টকাট ব্যবহার করবেন তা দেখুন ।


1
একটি সম্পাদনা অন্য সংস্করণ প্রস্তাব করেছে যা কোনও POSআর্গ ব্যবহার করে না point। এই জাতীয় দুটি সংস্করণ থাকার চেয়ে আরগটি alচ্ছিক করা POSএবং (point)কখন সেট করা উচিত nil
ড্র হয়েছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.