conf-emacs/configs/editing.el

174 lines
4.4 KiB
EmacsLisp

(defun c-switch-hh-cc ()
(interactive)
(let ((other
(let ((file (buffer-file-name)))
(if (string-match "\\.hh$" file)
(replace-regexp-in-string "\\.hh$" ".cc" file)
(replace-regexp-in-string "\\.cc$" ".hh" file)))))
(find-file other)))
(defun count-word (start end)
(let ((begin (min start end))(end (max start end)))
(save-excursion
(goto-char begin)
(re-search-forward "\\W*") ; skip blank
(setq i 0)
(while (< (point) end)
(re-search-forward "\\w+")
(when (<= (point) end)
(setq i (+ 1 i)))
(re-search-forward "\\W*"))))
i)
(defun stat-region (start end)
(interactive "r")
(let
((words (count-word start end)) (lines (count-lines start end)))
(message
(concat "Lines: "
(int-to-string lines)
" Words: "
(int-to-string words)))
)
)
(defun ruby-command (cmd &optional output-buffer error-buffer)
"Like shell-command, but using ruby."
(interactive (list (read-from-minibuffer "Ruby command: "
nil nil nil 'ruby-command-history)
current-prefix-arg
shell-command-default-error-buffer))
(shell-command (concat "ruby -e '" cmd "'") output-buffer error-buffer))
;; Shebangs
(defun insert-shebang (bin)
(interactive "sBin: ")
(save-excursion
(goto-char (point-min))
(insert "#!" bin "\n\n")))
(defun insert-shebang-if-empty (bin)
(when (buffer-empty-p)
(insert-shebang bin)))
;; C/C++
;; Comment boxing
(defun insert-header-guard ()
(interactive)
(save-excursion
(when (buffer-file-name)
(let*
((name (file-name-nondirectory buffer-file-name))
(macro (replace-regexp-in-string
"\\." "_"
(replace-regexp-in-string
"-" "_"
(upcase name)))))
(goto-char (point-min))
(insert "#ifndef " macro "_\n")
(insert "# define " macro "_\n\n")
(goto-char (point-max))
(insert "\n#endif /* !" macro "_ */\n")))))
(defun insert-header-inclusion ()
(interactive)
(when (buffer-file-name)
(let
((name
(replace-regexp-in-string ".c$" ".h"
(replace-regexp-in-string ".cc$" ".hh"
(file-name-nondirectory buffer-file-name)))))
(insert "#include \"" name "\"\n\n"))))
(defun sandbox ()
"Opens a C++ sandbox in current window."
(interactive)
(cd "/tmp")
(let ((file (make-temp-file "/tmp/" nil ".cc")))
(find-file file)
(insert "int main()\n{\n\n}\n")
(line-move -2)
(save-buffer)
(compile (concat "g++ -W -Wall -I /usr/include/qt4/ -I /usr/include/qt4/QtCore/ -L /usr/lib/qt4 -lQtCore " file " && ./a.out"))))
(defun c-insert-debug (&optional msg)
(interactive)
(when (not (looking-at "\\W*$"))
(beginning-of-line)
(insert "\n")
(line-move -1))
(c-indent-line)
(insert "std::cerr << \"\" << std::endl;")
(backward-char 15))
(defun c-insert-block (&optional r b a)
(interactive "P")
(unless b (setq b ""))
(unless a (setq a ""))
(if r
(progn
(save-excursion
(goto-char (rbegin))
(beginning-of-line)
(insert "\n")
(line-move -1)
(insert b "{")
(c-indent-line))
(save-excursion
(goto-char (- (rend) 1))
(end-of-line)
(insert "\n}" a)
(c-indent-line)
(line-move -1)
(end-of-line))
(indent-region (rbegin) (rend)))
(progn
(beginning-of-line)
(setq begin (point))
(insert b "{\n")
(end-of-line)
(insert "\n}" a)
(indent-region begin (point))
(line-move -1)
(end-of-line))))
(defun c-insert-braces (&optional r)
(interactive "P")
(c-insert-block r))
(defun c-insert-ns (name r)
(interactive "sName: \nP")
(c-insert-block r (concat "namespace " name "\n")))
(defun c-insert-switch (value r)
(interactive "sValue: \nP")
(c-insert-block r (concat "switch (" value ")\n")))
(defun c-insert-if (c r)
(interactive "sCondition: \nP")
(c-insert-block r (concat "if (" c ")\n")))
(defun c-insert-class (name)
(interactive "sName: ")
(c-insert-block () (concat "class " name "\n") ";")
(insert "public:")
(c-indent-line)
(insert "\n")
(c-indent-line)
(insert "\n")
(insert "\n")
(insert "private:")
(c-indent-line)
(insert "\n")
(c-indent-line)
(line-move -3)
(end-of-line))