Function: c-electric-slash

c-electric-slash is an interactive and byte-compiled function defined in cc-cmds.el.gz.

Signature

(c-electric-slash ARG)

Documentation

Insert a slash character.

If the slash is inserted immediately after the comment prefix in a c-style comment, the comment might get closed by removing whitespace and possibly inserting a "*". See the variable c-cleanup-list.

Indent the line as a comment, if:

  1. The slash is second of a "//" line oriented comment introducing
     token and we are on a comment-only-line, or

  2. The slash is part of a "*/" token that closes a block oriented
     comment.

If a numeric ARG is supplied, point is inside a literal, or c-syntactic-indentation is nil or c-electric-flag is nil, indentation is inhibited.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/cc-cmds.el.gz
(defun c-electric-slash (arg)
  "Insert a slash character.

If the slash is inserted immediately after the comment prefix in a c-style
comment, the comment might get closed by removing whitespace and possibly
inserting a \"*\".  See the variable `c-cleanup-list'.

Indent the line as a comment, if:

  1. The slash is second of a \"//\" line oriented comment introducing
     token and we are on a comment-only-line, or

  2. The slash is part of a \"*/\" token that closes a block oriented
     comment.

If a numeric ARG is supplied, point is inside a literal, or
`c-syntactic-indentation' is nil or `c-electric-flag' is nil, indentation
is inhibited."
  (interactive "*P")
  (c-with-string-fences
   (let ((literal (c-save-buffer-state () (c-in-literal)))
	 indentp
	 ;; shut this up
	 (c-echo-syntactic-information-p nil))

     ;; comment-close-slash cleanup?  This DOESN'T need `c-electric-flag' or
     ;; `c-syntactic-indentation' set.
     (when (and (not arg)
		(eq literal 'c)
		(memq 'comment-close-slash c-cleanup-list)
		(eq (c-last-command-char) ?/)
		(looking-at (concat "[ \t]*\\("
				    (regexp-quote comment-end) "\\)?$"))
					; (eq c-block-comment-ender "*/") ; C-style comments ALWAYS end in */
		(save-excursion
		  (save-restriction
		    (narrow-to-region (point-min) (point))
		    (back-to-indentation)
		    (looking-at (concat c-current-comment-prefix "[ \t]*$")))))
       (delete-region (progn (forward-line 0) (point))
		      (progn (end-of-line) (point)))
       (insert-char ?* 1)) ; the / comes later. ; Do I need a t (retain sticky properties) here?

     (setq indentp (and (not arg)
			c-syntactic-indentation
			c-electric-flag
			(eq (c-last-command-char) ?/)
			(eq (char-before) (if literal ?* ?/))))
     (let (post-self-insert-hook)	; Disable random functionality.
       (self-insert-command (prefix-numeric-value arg)))
     (if indentp
	 (indent-according-to-mode))))
  (c--call-post-self-insert-hook-more-safely))