legacy-dotfiles/emacs.d/functions.el
Tom Willemsen 0786ae7687 EMACS: New modes, functions and keys
Added lua-mode
Added muttrc-mode
Moved all functions to emacs.d/functions.el
Added go-mode
Set keys M-left, M-right, M-up and M-down to move to relative windows
2011-06-26 12:41:49 +02:00

191 lines
5.6 KiB
EmacsLisp

(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\\|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 ()
"Start ide-skel and set some keys")
(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))
(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 ()
(defvar php-warn-if-mumamo-off nil)
(setq case-fold-search t)
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-close '0)
(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"))