sra@lcs.mit.edu (Rob Austein) (06/30/89)
This has probably already been done, but what the hey. These two functions implement one of my favorite missing features from ITS/Twenex Emacs: ^R Up Comment$ and ^R Down Comment$, which were bound to M-n and M-p in most major modes in that version of Emacs. The extra hair involved in cleaning up an existing blank comment is due to a bug in the existing indent-for-comment code (as of 18.54). Try doing M-; twice in c-mode and watch the cursor carefully to see why one can't just match comment-end. Ta. --Rob Austein, MIT-LCS (defun forward-comment (arg) "Go to next line and do indent-for-comment there. With argument, goes down (or up) that many lines. If the current line has a comment that appears to be completely empty, kills it before moving." (interactive "p") ;; Let indent-for-comment figure out where comment begins (indent-for-comment) ;; Well, actually, indent-for-comment is a little off and gets a ;; little confused by C style /* foo */ comments, so we can't just ;; match against comment-end in the obvious fashion. Kludge city. (let ((s (string-match "[^ \t]" comment-end))) (setq s (and s (regexp-quote (substring comment-end s)))) (if (looking-at (concat "[ \t]*" s "$")) (kill-comment nil))) (forward-line arg) (indent-for-comment)) (defun backward-comment (arg) "Calls forward-comment with negated argument, for ease of key binding." (interactive "p") (forward-comment (- arg)))