From 0b0e95e88c1dbd6a9f16300ae03f725e37b6369b Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Thu, 28 Jul 2011 00:25:27 +0200 Subject: Preparing placing home-directory in repo --- .emacs.d/functions.el | 212 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 .emacs.d/functions.el (limited to '.emacs.d/functions.el') 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 "é" "é")) + +(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'"))) -- cgit v1.2.3-54-g00ecf