174 lines
4.4 KiB
EmacsLisp
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))
|