diff --git a/lisp/prog.el b/lisp/prog.el new file mode 100644 index 0000000..68730d4 --- /dev/null +++ b/lisp/prog.el @@ -0,0 +1,37 @@ +(defun gpolonkai/prog-in-string-p () + "Return `t' if point is inside a string." + (nth 3 (syntax-ppss))) + +(defun gpolonkai/prog-in-comment-p () + "Return `t' if point is inside a comment." + (nth 4 (syntax-ppss))) + +(defun gpolonkai/python-add-docstring () + "Add a Python docstring to the current thing. If point is + inside a function, add docstring to that. If point is in a + class, add docstring to that. If neither, add docstring to the + beginning of the file." + (interactive) + (save-restriction + (widen) + (beginning-of-defun) + (if (not (looking-at-p "\\(def\\|class\\) ")) + (progn + (goto-char (point-min)) + (back-to-indentation) + (forward-char) + (while (gpolonkai/prog-in-comment-p) + (forward-line) + (back-to-indentation) + (forward-char))) + (search-forward ":") + (while (or (gpolonkai/prog-in-string-p) + (gpolonkai/prog-in-comment-p)) + (search-forward ":"))) + (if (eq 1 (count-lines 1 (point))) + (open-line-above) + (open-line-below)) + (insert "\"\"\"") + (open-line-below) + (insert "\"\"\"") + (open-line-above)))