summaryrefslogtreecommitdiffstats
path: root/.emacs.d/functions.el
diff options
context:
space:
mode:
Diffstat (limited to '.emacs.d/functions.el')
-rw-r--r--.emacs.d/functions.el212
1 files changed, 212 insertions, 0 deletions
diff --git a/.emacs.d/functions.el b/.emacs.d/functions.el
new file mode 100644
index 0000000..9e831db
--- /dev/null
+++ b/.emacs.d/functions.el
@@ -0,0 +1,212 @@
+(defun quote-region ()
+ (interactive)
+ (let ((beginning (region-beginning))
+ (end (region-end)))
+ (save-excursion
+ (goto-char end)
+ (insert ?')
+ (goto-char beginning)
+ (insert ?'))))
+
+(defun what-face (pos)
+ "Find out which face the current position uses"
+ (interactive "d")
+ (let ((face (or (get-char-property (point) 'read-face-name)
+ (get-char-property (point) 'face))))
+ (if face
+ (message "Face: %s" face)
+ (message "No face at %d" pos))))
+
+(defun my-comp-finish-function (buf str)
+ "Don't show compilation window if everything went ok"
+ (if (string-match "exited abnormally" str)
+ ;; there were errors
+ (message "compilation errors, press C-x ` to visit")
+ ;; no errors, make the compilation window go away in 0.5 seconds
+ (run-at-time 0.5 nil 'delete-windows-on buf)
+ (message "NO COMPILATION ERRORS!")))
+
+(defun fullscreen ()
+ "Fill the entire screen with emacs"
+ (interactive)
+ (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
+ '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
+ (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
+ '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)))
+
+(defun c-toggle-header-source ()
+ "Toggle between a C source and header file"
+ (interactive)
+ (let ((ext (file-name-extension (buffer-file-name)))
+ (noext (file-name-sans-extension (buffer-file-name))))
+ (if (string= (substring ext 0 1) "c")
+ (find-file (concat noext ".h"))
+ (find-file (concat noext ".c")))))
+
+(defun browse-to-current-file ()
+ "Show current file in browser"
+ (interactive)
+ (browse-url buffer-file-name))
+
+(defun comment-line ()
+ "Toggle comment on a line"
+ (interactive)
+ (save-excursion
+ (beginning-of-line)
+ (insert "//")))
+
+(defun add-php-keywords ()
+ "Designed for c and c-style languages
+
+Currently adds | & ! . + = - / % * , < > ? : ->"
+ ;; Add ! at the beginning of font lock
+ (font-lock-add-keywords
+ 'php-mode
+ '(("\\([!]\\|\\=>\\)" 1 font-lock-operator-face)))
+ ;; Add the rest at the end of font lock
+ (font-lock-add-keywords
+ 'php-mode
+ '(("\\(->\\|[|.+=&/%*,:?<>-]\\)" 1 font-lock-operator-face)
+ ("\\(;\\)" 1 font-lock-end-statement)) 1))
+
+(defun add-html-keywords ()
+ "Designed for html, show some smarty tags"
+ (font-lock-add-keywords
+ 'html-mode
+ '(("{\\(\\*.*\\*\\)}" 1 font-comment-face)
+ ("{\\/?\\(extends\\|block\\|foreach\\(else\\)?\\|if\\)"
+ 1 font-lock-builtin-face)
+ ("\\$\\(\\(?:\\sw\\|\\s_\\)+\\)\\(?:|\\(\\(?:\\sw\\|\\s_\\)+\\):\\)"
+ (1 font-lock-variable-name-face)
+ (2 font-lock-function-name-face))
+ ("\\$\\(\\(?:\\sw\\|\\s_\\)+\\)"
+ 1 font-lock-variable-name-face)
+ ("{\\(\\(?:\\sw\\|\\s_\\)+\\).*}"
+ 1 font-lock-function-name-face))))
+
+(defun buffer-major-mode (buffer-or-string)
+ "Find out which major-mode is currently used"
+ (with-current-buffer buffer-or-string major-mode))
+
+(defun setup-system-frame-colours (&rest frame)
+ (let ((f (if (car frame)
+ (car frame)
+ (selected-frame))))
+ (progn
+ (set-frame-font "-*-tamsyn-medium-*-*-*-15-*-*-*-*-80-*-*"))))
+
+(defun show-init-sections ()
+ (interactive)
+ (occur ";;\s +.*\s +;;")
+ (other-window 1))
+
+(defun list-functions ()
+ (interactive)
+ (occur
+ "\\(?:\\(?:private\\|protected\\|public\\) \\)?function \\(?:\\sw\\)+(\\sw*)"))
+
+(defun insert-init-title (title width)
+ (interactive "stitle: \nnwidth: ")
+ (insert-char ?\; width)
+ (insert "\n;;")
+ (insert-char ?\s (floor (/ (- (- width 4.0) (length title)) 2)))
+ (insert title)
+ (insert-char ?\s (ceiling (/ (- (- width 4.0) (length title)) 2)))
+ (insert ";;\n")
+ (insert-char ?\; width))
+
+(defun x-init ()
+ "Initialization only for X"
+ (require 'lcars-theme)
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; THEME SETTINGS ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ (lcars-theme-set-faces
+ 'lcars
+
+ ;; markdown-mode
+ '(markdown-link-face (:inherit 'link))
+ '(markdown-header-face-1 (:inherit 'org-level-1))
+ '(markdown-header-face-2 (:inherit 'org-level-2))
+ '(markdown-header-face-3 (:inherit 'org-level-3))
+ '(markdown-header-face-4 (:inherit 'org-level-4))
+ '(markdown-header-face-5 (:inherit 'org-level-5))
+ '(markdown-header-face-6 (:inherit 'org-level-6)))
+
+ (add-hook 'emacs-startup-hook 'fullscreen))
+
+(defun cli-init ()
+ "Add a space to the linum column"
+ (setq linum-format "%d "))
+
+(defun replace-occurrences (from to)
+ (save-excursion
+ (goto-char (point-min))
+ (while (search-forward from nil t)
+ (replace-match to))))
+
+(defun replace-html-special-chars ()
+ (replace-occurrences "é" "&eacute;"))
+
+(defun on-before-save ()
+ (if (eq (buffer-major-mode (current-buffer)) 'html-mode)
+ (replace-html-special-chars))
+ (if (not (eq (buffer-major-mode (current-buffer)) 'markdown-mode))
+ (delete-trailing-whitespace)))
+
+(defun on-after-save ()
+ (let ((fname (buffer-file-name)))
+ (let ((suffix (file-name-extension fname)))
+ (if (string-equal suffix "el")
+ (byte-compile-file fname)))))
+
+(defun on-prog-mode ()
+ (font-lock-add-keywords
+ nil
+ '(("\\b\\(0[xX][0-9a-fA-F]+[lL]?\\|[0-9]+\\.?[0-9]*\\([eE][-+]?[0-9]+\\)?\\([lL]\\|[fF]\\|[dD]\\)?\\)\\b"
+ 0 font-lock-constant-face)
+ ("\\b\\(\\.[0-9]+\\([eE][-+]?[0-9]+\\)?\\([lL]\\|[fF]\\|[dD]\\)?\\)\\b"
+ 0 font-lock-constant-face)))
+ (rainbow-delimiters-mode)
+ (pretty-lambdas)
+ (auto-fill-mode 1))
+
+(defun on-c-mode ()
+ (local-set-key [f8] 'c-toggle-header-source)
+ (local-set-key [f9] 'compile)
+ (local-set-key [C-m] 'newline-and-indent)
+ (local-set-key [C-return] 'newline))
+
+(defun on-html-mode ()
+ (local-set-key [f9] 'browse-to-current-file)
+ (setq fill-column 73)
+ (auto-fill-mode))
+
+(defun on-php-mode ()
+ (local-set-key [f6] 'comment-line))
+
+(defun on-mail-mode ()
+ (turn-on-auto-fill)
+ (search-forward "\n\n"))
+
+(defun pretty-lambdas ()
+ (font-lock-add-keywords
+ nil `(("(\\(lambda\\>\\)"
+ (0 (progn
+ (compose-region (match-beginning 1)
+ (match-end 1)
+ ?λ)))))))
+
+;; http://emacs-fu.blogspot.com/2009/01/navigating-through-source-code-using.html
+(defun djcb-gtags-create-or-update ()
+ "create or update the gnu global tag file"
+ (interactive)
+ (if (not (= 0 (call-process "global" nil nil nil " -p"))) ; tagfile
+ (let ((olddir default-directory) ; doesn't exist?
+ (topdir (read-directory-name
+ "gtags: top of source tree:" default-directory)))
+ (cd topdir)
+ (shell-command "gtags && echo 'created tagfile'")
+ (cd olddir)) ; restore
+ ;; tagfile already exists; update it
+ (shell-command "global -u && echo 'updated tagfile'")))