X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=emacs.el;h=7dc64bb33bca2089fd1461a6f5b0a6c4ead7b3d9;hb=2f2c011e5cb2ba04ea1fb48e93a38db35da0c773;hp=eaa1011d1e7b7b37b83b28211d36c3a5d89a744f;hpb=7a17c8bf041a7c222b217b53d36647eaff2ba3d7;p=elisp.git diff --git a/emacs.el b/emacs.el index eaa1011..7dc64bb 100644 --- a/emacs.el +++ b/emacs.el @@ -1,4 +1,4 @@ -;; -*-Emacs-Lisp-*- +;; -*- mode: Emacs-Lisp; mode: rainbow; -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This program is free software; you can redistribute it and/or ;; @@ -25,7 +25,7 @@ (add-to-list 'load-path "/usr/share/emacs/site-lisp/vm/") (add-to-list 'load-path "/usr/share/emacs/site-lisp/bbdb/lisp/") (add-to-list 'load-path "/usr/share/emacs/site-lisp/mailcrypt/") -) + ) ;; It's better to set the preferences in the .Xresources so that the ;; window is not first displayed with the wrong options @@ -51,6 +51,7 @@ (add-to-list 'load-path "~/sources/gpl/elisp") (add-to-list 'load-path "~/sources/elisp") +(add-to-list 'load-path "~/local/elisp") ;; No, I do not like menus (menu-bar-mode -1) @@ -90,7 +91,7 @@ (icomplete-mode 1) ;; (setq highlight-current-line-globally t - ;; highlight-current-line-ignore-regexp "Faces\\|Colors\\| \\*Mini\\|\\*media\\|INBOX") +;; highlight-current-line-ignore-regexp "Faces\\|Colors\\| \\*Mini\\|\\*media\\|INBOX") ;; (highlight-current-line-minor-mode 1) ;; (highlight-current-line-set-bg-color "gray75") @@ -337,11 +338,11 @@ load-warning buffer in case of failure." ;; ;; If my own letter icon is here, use it and change its color ;; (when (file-exists-p "~/local/share/emacs/letter.xbm") - ;; (setq-default display-time-mail-icon - ;; (find-image - ;; '((:type xbm - ;; :file "~/local/share/emacs/letter.xbm" - ;; :ascent center))))) +;; (setq-default display-time-mail-icon +;; (find-image +;; '((:type xbm +;; :file "~/local/share/emacs/letter.xbm" +;; :ascent center))))) ;; My funky setting of face colors. Basically, we switch to a sober ;; look and darken a bit the colors which need to (because of the @@ -383,6 +384,7 @@ load-warning buffer in case of failure." (font-lock-function-name-face :foreground "cyan") (flyspell-incorrect-face :foreground "red2") (flyspell-duplicate-face :foreground "OrangeRed2") + (hl-line :background "white") (sh-heredoc :foreground "blue") (sh-heredoc-face :foreground "blue") (font-lock-keyword-face :foreground "blue") @@ -414,11 +416,11 @@ load-warning buffer in case of failure." (when window-system ;; (setq - ;; display-time-use-mail-icon t) + ;; display-time-use-mail-icon t) (ff/configure-faces '( - (escape-glyph :foreground "gray70" :weight 'bold) + (escape-glyph :foreground "#c0c0c0" :weight 'bold) (default :background "gray90" :foreground "black") (cperl-array-face :background "gray90" :foreground "blue" :weight 'bold) (cperl-hash-face :background "gray90" :foreground "purple" :weight 'bold) @@ -434,9 +436,11 @@ load-warning buffer in case of failure." (font-lock-string-face :foreground "dark olive green") (font-lock-variable-name-face :foreground "sienna") (font-lock-function-name-face :foreground "blue4" :weight 'bold) - ;; (font-lock-comment-face :foreground "") + ;; (font-lock-comment-delimiter-face :foreground "dark violet") + ;; (font-lock-comment-face :foreground "dark violet") (flyspell-incorrect-face :foreground "red2") (flyspell-duplicate-face :foreground "OrangeRed2") + (hl-line :background "white") (header-line :background "gray65") (sh-heredoc :foreground "darkorange3") (sh-heredoc-face :foreground "darkorange3") @@ -875,7 +879,7 @@ printer." (propertize (with-temp-buffer (apply 'call-process x) (buffer-string)) - 'face '(:background "gray80")) + 'face '(:background "#c0c0ff")) (with-temp-buffer (apply 'call-process x) (buffer-string)) )) @@ -947,8 +951,8 @@ printer." ) - ;; display-time-format "%b %a %e %H:%M" - ;; display-time-mail-face nil + ;; display-time-format "%b %a %e %H:%M" + ;; display-time-mail-face nil ) ;; Show the time, mail and stuff @@ -1082,15 +1086,18 @@ of commands in `ff/default-bash-commands' is used for auto-completion" ;; Please consider the security-related consequences of using it -(defun ff/make-shell-scripts-executable (&optional filename) - (setq filename (or filename (buffer-name))) - (when (and (string-match "\\.sh$\\|\\.pl$\\|\\.rb" filename) - (not (file-executable-p filename)) - ) - (set-file-modes filename 493) - (message "Made %s executable" filename))) +;; (defun ff/make-shell-scripts-executable (&optional filename) + ;; (setq filename (or filename (buffer-name))) + ;; (when (and (string-match "\\.sh$\\|\\.pl$\\|\\.rb" filename) + ;; (not (file-executable-p filename)) + ;; ) + ;; (set-file-modes filename 493) + ;; (message "Made %s executable" filename))) + +;; (add-hook 'after-save-hook 'ff/make-shell-scripts-executable) -(add-hook 'after-save-hook 'ff/make-shell-scripts-executable) +(add-hook 'after-save-hook + 'executable-make-buffer-file-executable-if-script-p) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Cool stuff to navigate in emacs-lisp sources @@ -1158,7 +1165,7 @@ goback argument, go back where we were." "The face to display known mail identities.") (defface ff/unknown-address-face - '((t (:foreground "red3"))) + '((t (:foreground "red4"))) "The face to display unknown mail identities.") (defun ff/explicit-name (email) @@ -1187,7 +1194,7 @@ ff/known-address-face is used." (bbdb-record-raw-notes record))) 'ff/known-address-face)) (error - (propertize (or (and data (concat "<" email ">")) + (propertize (or (and data (concat "<" net ">")) "*undefined*") 'face 'ff/unknown-address-face) )) @@ -1303,12 +1310,15 @@ universal argument starts xfig even if the .fig does not exist" (or (re-search-forward "{\\([^{}]*.\\)eps}" (point-at-eol) t) (re-search-forward "{\\([^{}]*.\\)pdf}" (point-at-eol) t) (re-search-forward "{\\([^{}]*.\\)pdf_t}" (point-at-eol) t) + (re-search-forward "{\\([^{}]*.\\)png}" (point-at-eol) t) + (re-search-forward "{\\([^{}]*.\\)jpg}" (point-at-eol) t) ))) (and (<= (match-beginning 1) (point)) (>= (match-end 1) (- (point) 2)))) (ff/run-eps-edition (match-string-no-properties 1) '(("fig" . "xfig") + ("jpg" . "gimp" ) ("png" . "gimp") ("pgm" . "gimp") ("ppm" . "gimp") ("jpg" . "xv")) universal) @@ -1398,8 +1408,8 @@ universal argument starts xfig even if the .fig does not exist" (define-key global-map [(control \?)] 'lookup-dict)) ;; (defun ff/generate-password () (interactive) - ;; (let ((c "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-")) - ;; (nth (random (length c)) c)) +;; (let ((c "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-")) +;; (nth (random (length c)) c)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Automatization of things I do often @@ -1507,7 +1517,7 @@ universal argument starts xfig even if the .fig does not exist" (goto-char (point-min)) (when (and (re-search-forward "START_IP_HEADER" nil t) (re-search-forward "END_IP_HEADER" nil t)) - (message "yep")) + (message "yep")) )) (defun ff/add-gpl () @@ -1658,8 +1668,8 @@ int main(int argc, char **argv) { (defun ff/cout-var (arg) "Invoked on a line with a list of variables names, -it inserts a line which displays their values in cout -(or cerr if the function is invoked with a universal arg)" +it inserts a line which displays their values in cout, or cerr if +the function is invoked with a universal arg" (interactive "P") (let ((line (if arg "cerr" "cout"))) (goto-char (point-at-bol)) @@ -1703,12 +1713,16 @@ and refilling all the paragraphs." ")) ) -(add-hook 'latex-mode-hook (lambda () - (define-key latex-mode-map - [(meta S)] 'ff/start-slide) - (define-key latex-mode-map - [(control c) (control a)] 'align-current) - )) +(add-hook + 'latex-mode-hook + (lambda () + (define-key latex-mode-map [(meta S)] 'ff/start-slide) + (define-key latex-mode-map [(control c) (control a)] 'align-current) + (define-key latex-mode-map [(control end)] 'tex-close-latex-block) + (define-key latex-mode-map [(control tab)] 'ispell-complete-word) + ;; (flyspell-mode 1) + ;; (reftex-mode 1) + )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1833,10 +1847,11 @@ a file in /tmp" (ff/add-copyrights) (ff/start-c)) - (when (string-match "\\.cc$" filename) + (when (string-match "\.\\(cc\\|cpp\\)$" filename) (c++-mode) (ff/add-copyrights) - (let ((headername (replace-regexp-in-string "\.cc" ".h" filename))) + (let ((headername (replace-regexp-in-string "\\.\\(cc\\|cpp\\)$" ".h" + filename))) (if (file-exists-p headername) (insert (concat "\n#include \"" (file-name-nondirectory headername) "\"\n")) (ff/start-c++)) @@ -1911,7 +1926,7 @@ a file in /tmp" ) ) -(setq compilation-finish-functions (cons 'ff/restore-windows-if-no-error compilation-finish-functions)) +(add-to-list 'compilation-finish-functions 'ff/restore-windows-if-no-error) (defun ff/fast-compile () "Compiles without asking anything." @@ -2015,7 +2030,7 @@ This may be a useful alternative binding for \\[delete-other-windows] (while (re-search-forward "[0-9\.]+" nil t) (let ((value (string-to-number (buffer-substring (match-beginning 0) (match-end 0))))) (delete-region (match-beginning 0) (match-end 0)) - (insert (format "%0.2f" value))))))) + (insert (format "%0.0f" value))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Keymaping @@ -2072,13 +2087,11 @@ This may be a useful alternative binding for \\[delete-other-windows] ;; Closes the current \begin{} -(add-hook 'latex-mode-hook (lambda () (define-key latex-mode-map [(control end)] 'tex-close-latex-block))) - (when (ff/load-or-alert "longlines") (setq longlines-show-hard-newlines t longlines-auto-wrap t - longline-show-effect #(" -- |\n" 0 2 (face escape-glyph)) + ;; longlines-show-effect #("|\n" 0 2 (face escape-glyph)) ) ;; (defun ff/auto-longlines () @@ -2093,11 +2106,6 @@ This may be a useful alternative binding for \\[delete-other-windows] ) -(add-hook 'latex-mode-hook - (lambda () - (define-key latex-mode-map [(control tab)] - 'ispell-complete-word))) - ;; Meta-/ remaped (completion) (define-key global-map [(shift right)] 'dabbrev-expand) @@ -2262,11 +2270,17 @@ next one. With universal argument, kill all killable buffers." (when (ff/load-or-alert "media") (unless window-system - (ff/configure-faces '( - (media/mode-string-face :foreground "blue4" :weight 'bold) - (media/current-tune-face :foreground "black" :background "yellow" :weight 'normal) - (media/instant-highlight-face :foreground "black" :background "orange" :weight 'normal) - )) + (ff/configure-faces + '( + (media/mode-string-face + :foreground "blue4" :weight 'bold) + + (media/current-tune-face + :foreground "black" :background "yellow" :weight 'normal) + + (media/instant-highlight-face + :foreground "black" :background "orange" :weight 'normal) + )) ) (define-key global-map [(meta \\)] 'media) @@ -2395,6 +2409,32 @@ proposes to visit them." (flyspell-mode) (when flyspell-mode (flyspell-buffer))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The fridge! +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun ff/move-region-to-fridge () (interactive) + "Cut the current region, paste it in a file called ./fridge +with a time tag, and save this file" + (unless (use-region-p) (error "No region selected")) + (let ((bn (file-name-nondirectory (buffer-file-name)))) + (kill-region (region-beginning) (region-end)) + (with-current-buffer (find-file-noselect "fridge") + (goto-char (point-max)) + (insert "\n") + (insert "######################################################################\n") + (insert "\n" + (format-time-string "%Y %b %d %H:%M:%S" (current-time)) + " (from " + bn + ")\n\n") + (yank) + (save-buffer) + (message "Region moved to fridge") + ) + ) + ) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; My own keymap ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -2440,6 +2480,7 @@ proposes to visit them." (lambda () (interactive) (bookmark-set) (bookmark-save))) +(define-key ff/map "f" 'ff/move-region-to-fridge) (define-key ff/map [(control f)] 'ff/flyspell-mode) (define-key ff/map [?\C-0] 'ff/delete-annoying-windows) @@ -2450,6 +2491,8 @@ proposes to visit them." (define-key ff/map "3" 'ff/twin-horizontal-current-buffer) (define-key ff/map [?\C-3] 'ff/twin-horizontal-current-buffer) +(define-key ff/map " " 'delete-trailing-whitespace) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Hacks so that all keys are functionnal in xterm and through ssh. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;