আমি এই সামান্য ফাংশনটিতে কাজ করছি যা পরবর্তী লাইনের সাথে বর্তমান লাইনের দিকে টান দেয়। আমি একটি কার্যকারিতা যুক্ত করতে চাই যাতে বর্তমান লাইনটি যদি একটি লাইন মন্তব্য হয় এবং পরবর্তী লাইনটিও একটি লাইন মন্তব্য হয়, তবে মন্তব্যের অক্ষরগুলি "টান আপ" ক্রিয়া সরিয়ে ফেলা হবে।
উদাহরণ:
আগে
;; comment 1▮
;; comment 2
কল করা হচ্ছে M-x modi/pull-up-line
পরে
;; comment 1▮comment 2
নোট করুন যে ;;
অক্ষরগুলি পূর্বে ছিল সেগুলি সরিয়ে ফেলা হয়েছে comment 2
।
(defun modi/pull-up-line ()
"Join the following line onto the current one (analogous to `C-e', `C-d') or
`C-u M-^' or `C-u M-x join-line'.
If the current line is a comment and the pulled-up line is also a comment,
remove the comment characters from that line."
(interactive)
(join-line -1)
;; If the current line is a comment
(when (nth 4 (syntax-ppss))
;; Remove the comment prefix chars from the pulled-up line if present
(save-excursion
(forward-char)
(while (looking-at "/\\|;\\|#")
(delete-forward-char 1))
(when (looking-at "\\s-")
(delete-forward-char 1)))))
উপরের ফাংশন কাজ করে কিন্তু এখন জন্য, প্রধান-মোড নির্বিশেষে, বিবেচনা করব /
বা ;
বা #
একটি মন্তব্য চরিত্র হিসাবে: (looking-at "/\\|;\\|#")
।
আমি এই লাইনটিকে আরও বুদ্ধিমান করে তুলতে চাই; মেজর-মোড নির্দিষ্ট।
সমাধান
@ অ্যারিকস্টোকসের সমাধানের জন্য ধন্যবাদ, আমি বিশ্বাস করি যে নীচে এখন আমার ব্যবহারের সমস্ত বিষয় কভার করেছে :)
(defun modi/pull-up-line ()
"Join the following line onto the current one (analogous to `C-e', `C-d') or
`C-u M-^' or `C-u M-x join-line'.
If the current line is a comment and the pulled-up line is also a comment,
remove the comment characters from that line."
(interactive)
(join-line -1)
;; If the current line is a comment
(when (nth 4 (syntax-ppss))
;; Remove the comment prefix chars from the pulled-up line if present
(save-excursion
(forward-char)
;; Delete all comment-start or space characters
(while (looking-at (concat "\\s<" ; comment-start char as per syntax table
"\\|" (substring comment-start 0 1) ; first char of `comment-start'
"\\|" "\\s-")) ; extra spaces
(delete-forward-char 1)))))
comment-start
এবং comment-end
স্ট্রিং সেট করা হয় যে, "/ *" এবং "* /" এ c-mode
(কিন্তু c++-mode
)। এবং c-comment-start-regexp
এটি উভয় শৈলীর সাথে মেলে। আপনি শেষ অক্ষরগুলি মুছে ফেলছেন এবং তারপরে যোগ দেওয়ার পরে শুরু। কিন্তু আমি মনে করি আমার সমাধান হবে uncomment-region
, এবং কি মন্তব্য চরিত্র কি সম্পর্কে এ গিয়ে Emacs চিন্তা করা যাক। join-line
comment-region
/* ... */
) পরিচালনা করতে যথেষ্ট স্মার্ট হতে চান ?