Update.
[elisp.git] / emacs.el
index 31b9abf..3d01f80 100644 (file)
--- a/emacs.el
+++ b/emacs.el
@@ -48,7 +48,8 @@
 (menu-bar-mode -1)
 
 ;; Nor fringes
-(when (functionp 'fringe-mode) (fringe-mode '(0 . 0)))
+;; (when (functionp 'fringe-mode) (fringe-mode '(0 . 0)))
+;; (when (functionp 'fringe-mode) (fringe-mode '(0 . 1)))
 
 ;; And I do not like scrollbar neither
 (when (functionp 'scroll-bar-mode) (scroll-bar-mode -1))
@@ -64,7 +65,7 @@
 ;; use colorization for all modes
 (global-font-lock-mode t)
 
-(setq font-lock-maximum-decoration 2
+(setq font-lock-maximum-decoration 3
       ;;'((latex-mode . 2) (t . 2))
       )
 
 (setq savehist-file "~/private/emacs/savehist")
 (when (functionp 'savehist-mode) (savehist-mode 1))
 
+;; And allow minibuffer recursion
+(setq enable-recursive-minibuffers t)
+(minibuffer-depth-indicate-mode 1)
+
 ;; I do not like tooltips
 (when (functionp 'tooltip-mode) (tooltip-mode nil))
 
@@ -125,8 +130,12 @@ load-warning buffer in case of failure."
 
 ;; make emacs use the clipboard so that copy/paste works for other
 ;; x-programs. I have no clue how all that clipboard thing works.
+
 ;; (setq x-select-enable-clipboard t)
 ;; (setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+;; (setq x-select-enable-primary t)
+;; (setq x-select-enable-clipboard t)
+;; (global-set-key "\C-y" 'clipboard-yank)
 
 (setq
 
@@ -225,8 +234,9 @@ load-warning buffer in case of failure."
  backup-by-copying-when-linked t
  )
 
-(setq
- user-emacs-directory "~/misc/emacs.d/")
+(setq tramp-backup-directory-alist backup-directory-alist)
+
+(setq user-emacs-directory "~/misc/emacs.d/")
 
 (setq
  abbrev-file-name (concat user-emacs-directory "abbrev_defs")
@@ -285,10 +295,12 @@ load-warning buffer in case of failure."
 ;; What modes for what file extentions
 (add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
 
+(require 'org-table)
+
 (add-to-list 'auto-mode-alist '("\\.txt\\'" . (lambda()
                                                 (text-mode)
                                                 (orgtbl-mode)
-                                                (auto-fill-mode)
+                                                ;; (auto-fill-mode)
                                                 (flyspell-mode))))
 
 (add-hook 'c++-mode-hook 'flyspell-prog-mode)
@@ -336,7 +348,7 @@ load-warning buffer in case of failure."
    ))
 
 ;; "tool" bar? Are you kidding?
-(when (boundp 'tool-bar-mode) (tool-bar-mode -1))
+(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
 
 ;; ;; If my own letter icon is here, use it and change its color
 ;; (when (file-exists-p "~/local/share/emacs/letter.xbm")
@@ -367,9 +379,9 @@ load-warning buffer in case of failure."
      (info-title-2 :foreground "green")
      (cperl-array-face :background "gray90" :foreground "blue" :weight 'bold)
      (cperl-hash-face :background "gray90" :foreground "purple" :weight 'bold)
-     (diff-added-face :foreground "blue" :weight 'bold)
-     (diff-changed-face :foreground "green" :weight 'bold)
-     (diff-removed-face :foreground "red" :weight 'bold)
+     (diff-added :background "gray90" :foreground "green4" :weight 'bold)
+     (diff-removed :background "gray90" :foreground "red2" :weight 'bold)
+     (diff-changed :background "gray90" :foreground "blue" :weight 'bold)
      (diff-file-header-face :background "white" :foreground "black"
                             :weight 'bold)
      (diff-header-face :background "white" :foreground "black")
@@ -387,8 +399,8 @@ load-warning buffer in case of failure."
      (flyspell-incorrect-face :foreground "red2")
      (flyspell-duplicate-face :foreground "OrangeRed2")
      (hl-line :background "white")
-     (sh-heredoc :foreground "blue")
-     (sh-heredoc-face :foreground "blue")
+     (sh-heredoc :foreground "black" :background "#fff0f0")
+     (sh-heredoc-face :foreground "black" :background "#fff0f0")
      (font-lock-keyword-face :foreground "blue")
      (highlight :background "darkseagreen3")
      (isearch :background "orange" :foreground "black")
@@ -422,14 +434,17 @@ load-warning buffer in case of failure."
 
   (ff/configure-faces
    '(
-     (escape-glyph :foreground "#c0c0c0" :weight 'bold)
+     ;; (escape-glyph :foreground "#c0c0c0" :weight 'bold)
+
+     (escape-glyph :foreground "green3" :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)
      (message-cited-text :foreground "red4")
+     (diff-mode :background "gray90" :weight 'bold)
      (diff-added :background "gray90" :foreground "green4" :weight 'bold)
      (diff-removed :background "gray90" :foreground "red2" :weight 'bold)
-     (diff-changed :background "gray90" :foreground "blue")
+     (diff-changed :background "gray90" :foreground "blue" :weight 'bold)
      (diff-file-header :background "white" :foreground "black"
                        :weight 'bold)
      (diff-header :background "white" :foreground "black")
@@ -443,9 +458,9 @@ load-warning buffer in case of failure."
      (flyspell-incorrect-face :foreground "red2")
      (flyspell-duplicate-face :foreground "OrangeRed2")
      (hl-line :background "white")
+     (sh-heredoc :foreground "black" :background "#fff0f0")
+     (sh-heredoc-face :foreground "black" :background "#fff0f0")
      (header-line :background "gray65")
-     (sh-heredoc :foreground "darkorange3")
-     (sh-heredoc-face :foreground "darkorange3")
      (highlight :background "turquoise")
      (message-cited-text-face :foreground "firebrick")
      (isearch :background "yellow" :foreground "black")
@@ -457,19 +472,18 @@ load-warning buffer in case of failure."
      (trailing-whitespace :background "gray65")
      (cursor :inverse-video t)
      (enotes/list-title-face :foreground "blue" :weight 'bold)
-     (mode-line :background "#9090f0" :foreground "black" :box nil
+     (mode-line :background "#b0b0ff" :foreground "black" :box nil
                 :inverse-video nil)
      (header-line :background "cornflowerblue" :foreground "black" :box nil
                   :inverse-video nil)
-     (mode-line-inactive :background "#606080" :foreground "black" :box nil
+     (mode-line-inactive :background "gray80" :foreground "black" :box nil
                          :inverse-video nil)
      ;; (fringe :background "black" :foreground "gray90")
-     (fringe :background "gray65")
-     (tex-verbatim :family "courrier")
+     (fringe :background "gray80")
      (ff/date-info-face :foreground "white" :weight 'bold)
      (ff/mail-alarm-face :foreground "white" :background "red2")
      ;; (alarm-vc-face :foreground "black" :background "yellow" :weight 'normal)
-     ))
+    ))
   )
 
 ;; When we are root, put the modeline in red
@@ -480,6 +494,19 @@ load-warning buffer in case of failure."
                 :inverse-video nil))
    ))
 
+;; Why should I have to do this?
+(add-hook 'sh-mode-hook
+          (lambda ()
+            (set-face-attribute 'sh-heredoc nil
+                                :foreground "#604000"
+                                :background "white"
+                                :italic t)
+            (set-face-attribute 'sh-heredoc-face nil
+                                :foreground "#604000"
+                                :background "white"
+                                :italic t)
+            ))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Move the window on the buffer without moving the cursor
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -578,31 +605,6 @@ load-warning buffer in case of failure."
 ;; Counting various entities in text
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defun ff/count-char ()
-  "Prints the number of characters between the first previous \"--\"
-and the firt next \"--\"."
-  (interactive)
-  (let ((from (save-excursion (re-search-backward "^--$\\|BEGIN_COUNT" nil t)))
-        (to (save-excursion (re-search-forward "^--$\\|END_COUNT" nil t))))
-    (if (and to from) (message "%d character(s)" (- to from 6))
-      (error "Can not find the -- delimiters"))))
-
-(defun ff/count-words ()
-  "Print number of words between the first previous \"--\" and the
-firt next \"--\"."
-  (interactive)
-  (let ((from (save-excursion (re-search-backward "^--$" nil t)))
-        (to (save-excursion (re-search-forward "^--$" nil t))))
-    (if (and to from)
-        (save-excursion
-          (goto-char from)
-          (let ((count 0))
-            (while (< (point) to)
-              (re-search-forward "\\w+\\W+")
-              (setq count (1+ count)))
-            (message "%d word(s)" count)))
-      (error "Can not find the -- delimiters"))))
-
 (defun ff/word-occurences ()
   "Display in a new buffer the list of words sorted by number of
 occurrences "
@@ -660,11 +662,11 @@ occurrences "
 ;; Printing
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(require 'ps-print)
+(load "ps-print")
 
 (setq ps-print-color-p nil
-      ;; ps-paper-type 'letter
-      ps-paper-type 'a4
+      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
@@ -778,13 +780,14 @@ printer."
       (/ (* 100 (string-to-number (ff/file-first-line (format "%s/%s_now" ff/battery-dir prefix))))
          (string-to-number (ff/file-first-line (format "%s/%s_full"  ff/battery-dir prefix))))
     (error -1))
-    )
+  )
 
 (defun ff/laptop-info-string () (interactive)
   (condition-case nil
       (concat
 
        ;; The temperature
+
        (let ((temp (/ (string-to-number (ff/file-first-line ff/temperature-file)) 1000)))
          (if (> temp 50)
              (concat
@@ -802,9 +805,20 @@ printer."
 
          (cond
           ((string= battery-status "Full") "L")
-          ((string= battery-status "Charging") (format "L%d%%" (ff/battery-percent "energy")))
-          ((string= battery-status "Discharging") (format "B%d%%"  (ff/battery-percent "charge")))
-          (t battery-status)))
+
+          ((string= battery-status "Charging")
+           (format "L%d%%" (max (ff/battery-percent "charge")
+                                (ff/battery-percent "energy"))))
+
+          ((string= battery-status "Discharging")
+           (let* ((c (max (ff/battery-percent "charge")
+                          (ff/battery-percent "energy")))
+                  (s (format "B%d%%" c)))
+             (if (>= c 20) s (propertize s 'face 'font-lock-warning-face))))
+
+          (t battery-status)
+
+          ))
 
        )
 
@@ -900,7 +914,7 @@ printer."
                              load
 
                              ,(if (ff/laptop-info-string)
-                                  '(concat " /" (ff/laptop-info-string) "/"))
+                                  '(concat " " (ff/laptop-info-string)))
 
                              )
 
@@ -1029,7 +1043,7 @@ of commands in `ff/default-bash-commands' is used for auto-completion"
  vc-follow-symlinks t
  )
 
-(when (require 'vc-git nil t)
+(when (load "vc-git" nil t)
   (add-to-list 'vc-handled-backends 'GIT))
 
 ;; alarm-vc.el is one of my own scripts, check my web page
@@ -1064,7 +1078,7 @@ of commands in `ff/default-bash-commands' is used for auto-completion"
 ;; Cool stuff to navigate in emacs-lisp sources
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(require 'find-func)
+(load "find-func")
 
 (defun ff/goto-function-definition (&optional goback)
   "Go directly to the definition of the function at point. With
@@ -1101,6 +1115,8 @@ goback argument, go back where we were."
 ;; Failsafe version if we can't load bbdb
 (defun ff/explicit-name (email) email)
 
+(load "vc-git")
+
 (when (ff/load-or-alert "bbdb")
 
   (setq
@@ -1126,7 +1142,7 @@ goback argument, go back where we were."
     "The face to display known mail identities.")
 
   (defface ff/unknown-address-face
-    '((t (:foreground "red4")))
+    '((t (:foreground "gray50")))
     "The face to display unknown mail identities.")
 
   (defun ff/explicit-name (email)
@@ -1164,6 +1180,8 @@ ff/known-address-face is used."
     )
 
   (ff/configure-faces '((ff/robot-address-face :foreground "green4")
+                        (ff/personal-address-face :foreground "dark magenta"
+                                                  :weight 'bold)
                         (ff/important-address-face :foreground "blue2"
                                                    ;; :underline t
                                                    ;; :background "white"
@@ -1172,7 +1190,6 @@ ff/known-address-face is used."
                                                    ;; :slant 'italic
                                                    )))
 
-
   )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1187,18 +1204,18 @@ ff/known-address-face is used."
   )
 
 (defface ff/secure-date
-  '((t (:background "gold" :weight bold)))
+  '((t (:background "white" :weight bold)))
   "The face to display the dates in the modeline.")
 
 (defun ff/secure-note-add () (interactive)
-  (find-file "~/private/secure-notes.gpg")
+  (find-file ff/secure-note-file)
 
   ;; Adds a new entry (i.e. date and a bunch of empty lines)
 
   (goto-char (point-min))
   (insert "-- "
           (format-time-string "%Y %b %d %H:%M:%S" (current-time))
-          " ------------------------------------------------\n\n")
+          " --\n\n")
   (previous-line 1)
 
   ;; Colorizes the dates
@@ -1206,10 +1223,11 @@ ff/known-address-face is used."
   (save-excursion
     (goto-char (point-min))
     (while (re-search-forward
-            "^-+ [0-9]+ [a-z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+.+$"
+            "^-- [0-9]+ [a-z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ -+$"
             nil t)
       (add-text-properties
-       (match-beginning 0) (match-end 0) '(face ff/secure-date))))
+       (match-beginning 0) (1+ (match-end 0))
+       '(face ff/secure-date rear-nonsticky t))))
 
   (set-buffer-modified-p nil)
   (setq buffer-undo-list nil)
@@ -1392,21 +1410,20 @@ universal argument starts xfig even if the .fig does not exist"
   (insert "%% -*- mode: latex; mode: reftex; mode: flyspell; coding: utf-8; tex-command: \"pdflatex.sh\" -*-
 
 \\documentclass[12pt]{article}
-\\usepackage[a4paper,top=2.5cm,bottom=2cm,left=1.5cm,right=1.5cm]{geometry}
+\\usepackage[a4paper,top=2.5cm,bottom=2cm,left=2.5cm,right=2.5cm]{geometry}
 \\usepackage[utf8]{inputenc}
 \\usepackage{amsmath}
 \\usepackage{amssymb}
-\\usepackage{hyperref}
+\\usepackage[pdftex]{graphicx}
+\\usepackage{microtype}
+\\usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=blue]{hyperref}
 
-%% \\usepackage[pdftex]{graphicx}
-%% \\usepackage{eurosym}
+\\setlength{\\parindent}{0cm}
+\\setlength{\\parskip}{12pt}
+\\renewcommand{\\baselinestretch}{1.3}
 
-\\hypersetup{
-  colorlinks=true,
-  linkcolor=blue,
-  urlcolor=blue,
-  citecolor=blue
-}
+\\def\\argmax{\\operatornamewithlimits{argmax}}
+\\def\\argmin{\\operatornamewithlimits{argmin}}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Sans serif fonts
@@ -1416,12 +1433,16 @@ universal argument starts xfig even if the .fig does not exist"
 %% \\renewcommand{\\ttdefault}{pcr}
 %% \\renewcommand*\\familydefault{\\sfdefault}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% \\def\\argmax{\\operatornamewithlimits{argmax}}
-%% \\def\\argmin{\\operatornamewithlimits{argmin}}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% \\setlength{\\parindent}{0cm}
-%% \\setlength{\\parskip}{12pt}
-%% \\renewcommand{\\baselinestretch}{1.3}
+%% The \\todo command
+\\newcounter{nbdrafts}
+\\setcounter{nbdrafts}{0}
+\\makeatletter
+\\newcommand{\\checknbdrafts}{
+\\ifnum \\thenbdrafts > 0
+\\@latex@warning@no@line{*WARNING* The document contains \\thenbdrafts \\space draft note(s)}
+\\fi}
+\\newcommand{\\todo}[1]{\\addtocounter{nbdrafts}{1}{\\color{red} #1}}
+\\makeatother
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \\begin{document}
@@ -1681,21 +1702,8 @@ and refilling all the paragraphs."
    (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)
-   ;; Strange that I have to specify that
-   ;; (setq paragraph-separate "[%     \f]*$")
-   ;; (setq paragraph-separate
-         ;; (concat "[%]*\\|[\f%]\\|[ \t]*\\($\\|"
-                 ;; "\\\\[][]\\|"
-                 ;; "\\\\" (regexp-opt (append
-                                     ;; (mapcar 'car latex-section-alist)
-                                     ;; '("begin" "label" "end" )) t)
-                 ;; "\\>\\|\\\\\\(" (regexp-opt '("item" "bibitem" "newline"
-                                               ;; "noindent" "newpage" "footnote"
-                                               ;; "marginpar" "parbox" "caption"))
-                 ;; "\\|\\$\\$\\|[a-z]*\\(space\\|skip\\|page[a-z]*\\)"
-                 ;; "\\>\\)[ \t]*\\($\\|%\\)\\)"))
-   ;; (flyspell-mode 1)
-   ;; (reftex-mode 1)
+   (copy-face 'default 'tex-verbatim)
+   ;; (ff/configure-faces '((tex-verbatim :background "gray95")))
    ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1794,7 +1802,7 @@ a file in /tmp"
 
       (when (string-match "\\.sh$" filename)
         (sh-mode)
-        (insert "#!/bin/bash\n\nset -e\n\n")
+        (insert "#!/bin/bash\n\nset -e\nset -o pipefail\n\n")
         (save-excursion
           (ff/add-copyrights))
         )
@@ -1843,6 +1851,17 @@ a file in /tmp"
     (add-to-list 'find-file-not-found-functions 'ff/start-file)
   (add-to-list 'find-file-not-found-hooks 'ff/start-file))
 
+(when (>= emacs-major-version 24)
+  (define-obsolete-function-alias 'make-local-hook 'ignore "21.1")
+  (setq send-mail-function 'sendmail-send-it) ;; emacs 24.x stuff
+
+  (custom-set-faces
+   '(diff-added ((default (:background "gray90" :foreground "green4" :weight bold))))
+   '(diff-removed ((default (:background "gray90" :foreground "red2" :weight bold))))
+   '(diff-changed ((default (:background "gray90" :foreground "blue" :weight bold))))
+   )
+  )
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-key global-map [f8] 'ff-find-other-file)
@@ -2010,7 +2029,7 @@ This may be a useful alternative binding for \\[delete-other-windows]
 ;; Keymaping
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(require 'info nil t)
+(load "info" nil t)
 
 (define-key global-map [(shift iso-lefttab)] 'ispell-complete-word)
 ;; shift-tab going backward is kind of standard
@@ -2066,6 +2085,9 @@ This may be a useful alternative binding for \\[delete-other-windows]
   (setq longlines-show-hard-newlines t
         longlines-auto-wrap t
         ;; longlines-show-effect #("|\n" 0 2 (face escape-glyph))
+        ;; longlines-show-effect #("∴\n" 0 2 (face escape-glyph))
+        longlines-show-effect #("•\n" 0 2 (face escape-glyph))
+        ;; longlines-show-effect #("↵\n" 0 2 (face escape-glyph))
         )
 
   ;; (defun ff/auto-longlines ()
@@ -2206,32 +2228,28 @@ next one. With universal argument, kill all killable buffers."
 ;; exclusively with my selector.el
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(require 'recentf)
+(load "recentf")
 
-(setq recentf-exclude
-      (append recentf-exclude
-              '("enotes$" "secure-notes$" "media-playlists$"
-                "bbdb$"
-                "svn-commit.tmp$" ".git/COMMIT_EDITMSG$"
-                "\.bbl$" "\.aux$" "\.toc$"))
+;; If we just check for file-symlink-p, everytime we start emacs it
+;; will check all the remote files listed in recentf-list, so we check
+;; that they are not remote first
+(defun ff/file-not-remote-but-symlink (filename)
+  (and (not (file-remote-p filename)) (file-symlink-p filename)))
+
+(setq recentf-exclude (append recentf-exclude
+                              '(
+                                ff/file-not-remote-but-symlink
+                                "enotes$" "secure-notes$" "media-playlists$"
+                                "bbdb$"
+                                "svn-commit.tmp$" ".git/COMMIT_EDITMSG$"
+                                "\.bbl$" "\.aux$" "\.toc$"
+                                ))
       recentf-max-saved-items 1000
       recentf-save-file "~/private/emacs/recentf"
       )
 
 (when (boundp 'recentf-keep) (add-to-list 'recentf-keep 'file-remote-p))
 
-;; Removes the link if we add the file itself (I am fed up with
-;; duplicates because of vc-follow-symlinks)
-
-(defadvice recentf-add-file (before ff/remove-links (filename) activate)
-  ;; If we are adding a filename corresponding to the last link we
-  ;; have added, remove the latter
-  (when (and recentf-list
-             (file-symlink-p (car recentf-list))
-             (string= filename (file-chase-links filename)))
-    (setq recentf-list (cdr recentf-list))
-    ))
-
 (recentf-mode 1)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2267,6 +2285,7 @@ next one. With universal argument, kill all killable buffers."
         media/mplayer/args '(
                              "-framedrop"
                              "-zoom"
+                             "-cache" "512"
                              "-subfont-osd-scale" "3"
                              ;; "-stop-xscreensaver"
                              ;; "-osdlevel" "3"
@@ -2282,7 +2301,7 @@ next one. With universal argument, kill all killable buffers."
 ;; selector.el is one of my own scripts, check my web page
 
 (when (ff/load-or-alert "selector" t)
-  (define-key global-map [(shift return)] 'selector/quick-move-in-buffer)
+  ;; (define-key global-map [(shift return)] 'selector/quick-move-in-buffer)
   (define-key global-map [(control x) (control b)] 'selector/switch-buffer)
 
   (defun ff/visit-debpkg-file (&optional regexp)
@@ -2334,6 +2353,16 @@ proposes to visit them."
    )
   )
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; My script to automatically count the number of words and characters
+;; between two markers
+
+(ff/load-or-alert "text-counters.el")
+
+;; Display them in the modeline when in text-mode
+
+(add-hook 'text-mode-hook 'tc/add-text-counters-in-modeline)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; A function to remove temporary alarm windows
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2380,8 +2409,10 @@ proposes to visit them."
   )
 
 (defun ff/flyspell-mode (arg) (interactive "p")
-  (flyspell-mode)
-  (when flyspell-mode (flyspell-buffer)))
+  (if flyspell-mode (flyspell-mode -1)
+    (flyspell-mode 1)
+    (flyspell-buffer))
+)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; The fridge!
@@ -2409,12 +2440,38 @@ with a time tag, and save this file"
     )
   )
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Let's be zen. Remove the modeline and fringes.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(setq ff/zen-original-setting nil)
+
+(defun ff/zen () (interactive)
+  (if ff/zen-original-setting
+      (setq mode-line-format (car ff/zen-original-setting)
+            fringe-mode (cdr ff/zen-original-setting)
+            ff/zen-original-setting nil)
+    (setq ff/zen-original-setting (cons mode-line-format fringe-mode)
+          mode-line-format nil
+          fringe-mode '(0 . 0))
+    (delete-other-windows)
+    )
+  (fringe-mode fringe-mode)
+  (if ff/zen-original-setting
+      (message "Zen mode")
+    (message "Cluttered mode"))
+  )
+
+;; (define-key global-map [(control x) (x)] 'ff/zen)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; My own keymap
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (setq ff/map (make-sparse-keymap))
 (define-key global-map [(control \`)] ff/map)
+;;(define-key global-map [(control @)] ff/map)
+
 (define-key esc-map "`" ff/map)
 
 (defun ff/git-status (&optional dir) (interactive)
@@ -2446,6 +2503,7 @@ with a time tag, and save this file"
 (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)
+(define-key ff/map "t" (lambda () (interactive) (find-file "~/private/TODO.txt")))
 (define-key ff/map "h" 'ff/tidy-html)
 (define-key ff/map "c" 'ff/count-char)
 (define-key ff/map [(control p)] 'ff/print-to-file)
@@ -2471,6 +2529,7 @@ with a time tag, and save this file"
 (define-key ff/map [?\C-3] 'ff/twin-horizontal-current-buffer)
 
 (define-key ff/map " " 'delete-trailing-whitespace)
+(define-key ff/map [(control x)] 'ff/zen)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Hacks so that all keys are functionnal in xterm and through ssh.
@@ -2483,27 +2542,27 @@ with a time tag, and save this file"
   ;; ugly.
 
   ;; (defun ff/yank-with-xclip (&optional arg)
-    ;; "Paste the content of the X clipboard with the xclip
-;; command. Without ARG converts some of the '\\uxxxx' characters."
-    ;; (interactive "P")
-    ;; (with-temp-buffer
-      ;; (shell-command "xclip -o" t)
-      ;; (unless arg
-        ;; (mapc (lambda (x) (replace-string (concat "\\u" (car x)) (cdr x) nil (point-min) (point-max)))
-              ;; '(("fffd" . "??")
-                ;; ("2013" . "-")
-                ;; ("2014" . "--")
-                ;; ("2018" . "`")
-                ;; ("2019" . "'")
-                ;; ("201c" . "``")
-                ;; ("201d" . "''")
-                ;; ("2022" . "*")
-                ;; ("2026" . "...")
-                ;; ("20ac" . "EUR")
-                ;; )))
-      ;; (kill-ring-save (point-min) (point-max)))
-
-    ;; (yank))
+  ;; "Paste the content of the X clipboard with the xclip
+  ;; command. Without ARG converts some of the '\\uxxxx' characters."
+  ;; (interactive "P")
+  ;; (with-temp-buffer
+  ;; (shell-command "xclip -o" t)
+  ;; (unless arg
+  ;; (mapc (lambda (x) (replace-string (concat "\\u" (car x)) (cdr x) nil (point-min) (point-max)))
+  ;; '(("fffd" . "??")
+  ;; ("2013" . "-")
+  ;; ("2014" . "--")
+  ;; ("2018" . "`")
+  ;; ("2019" . "'")
+  ;; ("201c" . "``")
+  ;; ("201d" . "''")
+  ;; ("2022" . "*")
+  ;; ("2026" . "...")
+  ;; ("20ac" . "EUR")
+  ;; )))
+  ;; (kill-ring-save (point-min) (point-max)))
+
+  ;; (yank))
 
   ;; (define-key global-map [(meta y)] 'ff/yank-with-xclip)