legacy-dotfiles/emacs.d/functions.el

229 lines
7 KiB
EmacsLisp
Raw Normal View History

(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 set-column-marker ()
"Default column markers"
(column-marker-1 73)
(column-marker-2 81))
(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 'naquadah-theme)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; THEME SETTINGS ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(naquadah-theme-set-faces
'naquadah
;; 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)))
(set-column-marker)
(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)
(auto-fill-mode)
(set-column-marker))
(defun on-markdown-mode ()
(whitespace-mode)
(auto-fill-mode))
(defun on-org-mode ()
(flyspell-mode 1)
(auto-fill-mode 1))
(defun on-php-mode ()
(column-marker-1 76)
(column-marker-2 81)
(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'")))