Geçerli satıra bir sonraki satırı çeken bu küçük fonksiyon üzerinde çalışıyorum. Geçerli satır bir satır yorum ve sonraki satır da bir satır yorum ise, yorum karakterleri "pull-up" eyleminden sonra kaldırılır, böylece bir işlevsellik eklemek istiyorum.
Misal:
Önce
;; comment 1▮
;; comment 2
çağrı M-x modi/pull-up-line
Sonra
;; comment 1▮comment 2
;;
Daha önce olan karakterlerin kaldırıldığını unutmayın 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)))))
Yukarıdaki fonksiyon çalışır ama şimdi, ne olursa olsun büyük-mod, bu dikkate alacaktır /
ya ;
ya #
bir açıklama karakteri olarak: (looking-at "/\\|;\\|#")
.
Bu çizgiyi daha akıllı yapmak istiyorum; büyük moda özgü.
Çözüm
@Ericstokes'in çözümü sayesinde, aşağıdakilerin artık tüm kullanım durumlarımı kapsadığına inanıyorum :)
(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
ve comment-end
dizeleri vardır . Ve her iki stile de uyuyor. Bitiş karakterlerini, ardından katıldıktan sonra başlangıcını silersiniz. Ama çözüm için olacağını düşünüyorum , ve yorum karakteri ne olduğu hakkında Emacs endişe edelim. c-mode
c++-mode
c-comment-start-regexp
uncomment-region
join-line
comment-region
/* ... */
) işleyecek kadar akıllı olmasını ister misiniz ?