*** empty log message ***
[elisp.git] / emacs.el
index 8d4c2f0..364adec 100644 (file)
--- 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         ;;
 ;; Contact <francois@fleuret.org> for comments & bug reports             ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+;; Ugly hack because 23.2 is not installed properly in my Debian
+
+(when (and (>= emacs-major-version 23)
+           (>= emacs-minor-version 2))
+  (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
 
@@ -409,7 +418,7 @@ load-warning buffer in case of failure."
 
   (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)
@@ -425,7 +434,8 @@ 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")
      (header-line :background "gray65")
@@ -650,10 +660,10 @@ occurrences "
 (setq ps-print-color-p nil
       ;; ps-paper-type 'letter
       ps-paper-type 'a4
-      ps-top-margin (* 1.75 56.692)
-      ps-left-margin 56.692
-      ps-bottom-margin 56.692
-      ps-right-margin 56.692
+      ;; ps-top-margin (* 1.75 56.692)
+      ;; ps-left-margin 56.692
+      ;; ps-bottom-margin 56.692
+      ;; ps-right-margin 56.692
 
       ;; Simple header. Remove that silly frame shadow.
       ps-print-header nil
@@ -672,6 +682,26 @@ occurrences "
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+;; http://blog.tuxicity.se/elisp/emacs/2010/03/26/rename-file-and-buffer-in-emacs.htm
+
+(defun rename-file-and-buffer ()
+  "Renames current buffer and file it is visiting."
+  (interactive)
+  (let ((name (buffer-name))
+        (filename (buffer-file-name)))
+    (if (not (and filename (file-exists-p filename)))
+        (message "Buffer '%s' is not visiting a file!" name)
+      (let ((new-name (read-file-name "New name: " filename)))
+        (cond ((get-buffer new-name)
+               (message "A buffer named '%s' already exists!" new-name))
+              (t
+               (rename-file name new-name 1)
+               (rename-buffer new-name)
+               (set-visited-file-name new-name)
+               (set-buffer-modified-p nil)))))))
+
+(global-set-key (kbd "C-c r") 'rename-file-and-buffer)
+
 (defun ff/non-existing-filename (dir prefix suffix)
   "Returns a filename of the form DIR/PREFIX[.n].SUFFIX whose file does
 not exist"
@@ -1129,7 +1159,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)
@@ -1158,7 +1188,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)
                ))
@@ -1274,12 +1304,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)
@@ -1401,15 +1434,26 @@ universal argument starts xfig even if the .fig does not exist"
 %% \\usepackage{hyperref}
 %% \\usepackage{harvard}
 
+\\setlength{\\parindent}{0cm}
+\\setlength{\\parskip}{12pt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Sans serif fonts
 %% \\usepackage[T1]{fontenc}
 %% \\usepackage[scaled]{helvet}
 %% \\usepackage[cm]{sfmath}
 %% \\renewcommand{\\ttdefault}{pcr}
 %% \\renewcommand*\\familydefault{\\sfdefault}
-
-\\setlength{\\parindent}{0cm}
-\\setlength{\\parskip}{12pt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draft layout
+%% \\setlength{\\parindent}{1cm}
+%% \\renewcommand{\\baselinestretch}{2.0}
+%% \\setlength{\\oddsidemargin}{-0.6cm}
+%% \\setlength{\\evensidemargin}{0cm}
+%% \\setlength{\\textwidth}{17.5cm}
+%% \\setlength{\\textheight}{23cm}
+%% \\setlength{\\topmargin}{-1.5cm}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %% \\renewcommand{\\baselinestretch}{1.3}
 
@@ -1462,6 +1506,14 @@ universal argument starts xfig even if the .fig does not exist"
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+(defun ff/remove-ip-header () (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (when (and (re-search-forward "START_IP_HEADER" nil t)
+               (re-search-forward "END_IP_HEADER" nil t))
+        (message "yep"))
+    ))
+
 (defun ff/add-gpl ()
   "Adds the GPL statements at the beginning of current buffer."
   (interactive)
@@ -1522,6 +1574,24 @@ END_IP_HEADER
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+(defun ff/start-c ()
+  "Adds the header to start a C program."
+  (interactive)
+  ;;   (beginning-of-buffer)
+  (insert
+   "
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv) {
+  exit(EXIT_SUCCESS);
+}
+")
+  (previous-line 2)
+  )
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 (defun ff/start-c++ ()
   "Adds the header to start a C++ program."
   (interactive)
@@ -1637,12 +1707,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)
+   (reftex-mode)
+   ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
@@ -1762,6 +1836,11 @@ a file in /tmp"
         (previous-line 1)
         )
 
+      (when (string-match "\\.c$" filename)
+        (c-mode)
+        (ff/add-copyrights)
+        (ff/start-c))
+
       (when (string-match "\\.cc$" filename)
         (c++-mode)
         (ff/add-copyrights)
@@ -2001,13 +2080,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 ()
@@ -2022,11 +2099,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)
@@ -2324,6 +2396,20 @@ proposes to visit them."
   (flyspell-mode)
   (when flyspell-mode (flyspell-buffer)))
 
+(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"
+  (kill-region (region-beginning) (region-end))
+  (with-current-buffer (find-file-noselect "fridge")
+    (goto-char (point-max))
+    (insert "\n"
+            (format-time-string "%Y %b %d %H:%M:%S" (current-time))
+            "\n\n")
+    (yank)
+    (save-buffer)
+    )
+  )
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; My own keymap
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2340,6 +2426,7 @@ proposes to visit them."
 (define-key ff/map [(control g)] 'ff/git-status)
 (define-key ff/map [(control w)] 'server-edit)
 (define-key ff/map [(control d)] 'ff/elisp-debug-on)
+(define-key ff/map "d" 'diary)
 (define-key ff/map [(control \`)] 'ff/bash-new-buffer)
 (define-key ff/map [(control n)] 'enotes/show-all-notes)
 (define-key ff/map [(control s)] 'ff/secure-note-add)
@@ -2351,6 +2438,7 @@ proposes to visit them."
 (define-key ff/map [(control c)] 'calendar)
 ;; (define-key ff/map [(control c)] (lambda () (interactive) (save-excursion (calendar))))
 (define-key ff/map [(control l)] 'goto-line)
+(define-key ff/map "l" 'longlines-mode)
 (define-key ff/map [(control o)] 'selector/quick-pick-recent)
 (define-key ff/map "s" 'selector/quick-move-in-buffer)
 (define-key ff/map "S" 'selector/search-sentence)
@@ -2367,6 +2455,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)