(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))