নীচের কোডগুলিতে একটি রেগএক্সপ্যাকের পরিবর্তে ফাংশন সহ একটি ফন্ট-লক নিয়ম ব্যবহার করে, ফাংশন অনুসন্ধানের ঘটনাগুলি অনুসন্ধান করে $VARতবে কেবলমাত্র যখন তারা ডাবল-কোটেড স্ট্রিংয়ের ভিতরে থাকে। (syntax-ppss)এটি নির্ধারণ করতে ফাংশনটি ব্যবহৃত হয়।
ফন্ট-লক নিয়মটি prependবিদ্যমান স্ট্রিং হাইলাইটের শীর্ষে নিজেকে যুক্ত করতে পতাকা ব্যবহার করে । (মনে রাখবেন যে এর জন্য অনেকগুলি প্যাকেজ ব্যবহার করা tহয়েছে Unfortunately দুর্ভাগ্যক্রমে, এটি বিদ্যমান হাইলাইটিংয়ের সমস্ত দিককে ওভাররাইট করে For উদাহরণস্বরূপ, prependঅগ্রভাগের রঙ প্রতিস্থাপন করার সময় ব্যবহার করে স্ট্রিং পটভূমির রঙ ধরে রাখা হবে (যদি সেখানে থাকে)))
(defun sh-script-extra-font-lock-is-in-double-quoted-string ()
"Non-nil if point in inside a double-quoted string."
(let ((state (syntax-ppss)))
(eq (nth 3 state) ?\")))
(defun sh-script-extra-font-lock-match-var-in-double-quoted-string (limit)
"Search for variables in double-quoted strings."
(let (res)
(while
(and (setq res
(re-search-forward
"\\$\\({#?\\)?\\([[:alpha:]_][[:alnum:]_]*\\|[-#?@!]\\)"
limit t))
(not (sh-script-extra-font-lock-is-in-double-quoted-string))))
res))
(defvar sh-script-extra-font-lock-keywords
'((sh-script-extra-font-lock-match-var-in-double-quoted-string
(2 font-lock-variable-name-face prepend))))
(defun sh-script-extra-font-lock-activate ()
(interactive)
(font-lock-add-keywords nil sh-script-extra-font-lock-keywords)
(if (fboundp 'font-lock-flush)
(font-lock-flush)
(when font-lock-mode
(with-no-warnings
(font-lock-fontify-buffer)))))
আপনি উপযুক্ত হুকটিতে শেষ ফাংশনটি যুক্ত করে এটি ব্যবহার করতে পারেন, উদাহরণস্বরূপ:
(add-hook 'sh-mode-hook 'sh-script-extra-font-lock-activate)
sh-mode? এটি নিজেই ইমাসে যুক্ত হতে পারে।