Update.
[elisp.git] / emacs.el
index 1d2d66f..b22d494 100644 (file)
--- a/emacs.el
+++ b/emacs.el
 ;; Contact <francois@fleuret.org> for comments & bug reports             ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; Contact <francois@fleuret.org> for comments & bug reports             ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+;; (defadvice display-warning (before ff/blah (type message &optional level buffer-name) activate)
+  ;; (message "--- BLAH %s ---" message)
+  ;; (backtrace)
+;; )
+
 ;; It's better to set the preferences in the .Xresources so that the
 ;; window is not first displayed with the wrong options
 
 ;; It's better to set the preferences in the .Xresources so that the
 ;; window is not first displayed with the wrong options
 
 ;; Xft.antialias: true
 ;; Xft.rgba: rgb
 
 ;; Xft.antialias: true
 ;; Xft.rgba: rgb
 
-;; (set-default-font "Inconsolata 15")
+(set-frame-font "Inconsolata 15")
 
 ;; (package-initialize)
 
 
 ;; (package-initialize)
 
-(set-default-font "Bitstream vera sans mono-12")
+;;(set-face-attribute 'default nil :height 130)
+
+;;(set-default-font "Inconsolata 13")
+;; (set-default-font "Bitstream vera sans mono 12")
 ;; (set-default-font "Liberation Mono-13")
 ;; (set-default-font "DejaVu sans mono 15")
 ;; (set-default-font "Droid sans mono 13")
 ;; (set-default-font "Liberation Mono-13")
 ;; (set-default-font "DejaVu sans mono 15")
 ;; (set-default-font "Droid sans mono 13")
@@ -58,8 +66,8 @@
 
 ;; Where I keep my own scripts
 
 
 ;; Where I keep my own scripts
 
-(add-to-list 'load-path "~/sources/gpl/elisp")
-(add-to-list 'load-path "~/sources/elisp")
+(add-to-list 'load-path "~/src/gpl/elisp")
+(add-to-list 'load-path "~/src/elisp")
 (add-to-list 'load-path "~/local/elisp")
 
 ;; No, I do not like menus
 (add-to-list 'load-path "~/local/elisp")
 
 ;; No, I do not like menus
@@ -88,6 +96,8 @@
 ;; use colorization for all modes
 (global-font-lock-mode t)
 
 ;; use colorization for all modes
 (global-font-lock-mode t)
 
+;; (load "auctex")
+
 (setq font-lock-maximum-decoration 3
       ;;'((latex-mode . 2) (t . 2))
       )
 (setq font-lock-maximum-decoration 3
       ;;'((latex-mode . 2) (t . 2))
       )
@@ -123,11 +133,16 @@ uses `load-path' to find it."
       (ff/compile-when-needed (concat name ".el"))
     (mapc (lambda (dir)
             (let* ((src (concat dir "/" name)))
       (ff/compile-when-needed (concat name ".el"))
     (mapc (lambda (dir)
             (let* ((src (concat dir "/" name)))
+              ;; (message "Compiling " scr) ;;***********
               (when (file-newer-than-file-p src (concat src "c"))
               (when (file-newer-than-file-p src (concat src "c"))
-                (if (let ((byte-compile-verbose nil))
-                      (condition-case nil
-                          (byte-compile-file src)
-                        (error nil)))
+                (if
+                    ;; (let ((byte-compile-verbose nil))
+                      ;; (condition-case nil
+                          ;; (byte-compile-file src)
+                        ;; (error nil)))
+
+                    (byte-compile-file src)
+
                     (message (format "Compiled %s" src ))
                   (message (format "Failed compilation of %s" src))))))
           load-path)))
                     (message (format "Compiled %s" src ))
                   (message (format "Failed compilation of %s" src))))))
           load-path)))
@@ -184,7 +199,7 @@ load-warning buffer in case of failure."
  next-error-highlight t
 
  ;; blink the screen instead of beeping
  next-error-highlight t
 
  ;; blink the screen instead of beeping
;; visible-bell t
+ visible-bell t
 
  ;; take the CR when killing a line
  kill-whole-line t
 
  ;; take the CR when killing a line
  kill-whole-line t
@@ -231,6 +246,10 @@ load-warning buffer in case of failure."
  epa-file-cache-passphrase-for-symmetric-encryption t
  ;; And I like ascii files
  epa-armor t
  epa-file-cache-passphrase-for-symmetric-encryption t
  ;; And I like ascii files
  epa-armor t
+ ;; This goes with in your ~/.gnupg/gpg-agent.conf:
+ ;; allow-emacs-pinentry
+ ;; allow-loopback-pinentry
+ epa-pinentry-mode 'loopback
 
  ;; tramp-default-method "ssh"
  tramp-default-method "scp"
 
  ;; tramp-default-method "ssh"
  tramp-default-method "scp"
@@ -249,9 +268,11 @@ load-warning buffer in case of failure."
  ;; vertically, even when the said window is very wide
  split-height-threshold 0
  split-width-threshold nil
  ;; vertically, even when the said window is very wide
  split-height-threshold 0
  split-width-threshold nil
-
  )
 
  )
 
+(custom-set-variables
+ '(query-replace-from-to-separator nil))
+
 ;; The backups
 
 (setq
 ;; The backups
 
 (setq
@@ -331,7 +352,7 @@ load-warning buffer in case of failure."
 ;; What modes for what file extentions
 (add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
 
 ;; What modes for what file extentions
 (add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
 
-(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
+;;(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
 
 (require 'org-table)
 
 
 (require 'org-table)
 
@@ -345,6 +366,9 @@ load-warning buffer in case of failure."
 ;; (add-hook 'lua-mode-hook 'flyspell-prog-mode)
 (add-hook 'log-edit-mode-hook 'flyspell-mode)
 
 ;; (add-hook 'lua-mode-hook 'flyspell-prog-mode)
 (add-hook 'log-edit-mode-hook 'flyspell-mode)
 
+;; (add-hook 'markdown-mode-hook 'flyspell-mode)
+;; (add-hook 'markdown-mode-hook 'auto-fill-mode)
+
 ;; I am a power-user
 
 (put 'narrow-to-region 'disabled nil)
 ;; I am a power-user
 
 (put 'narrow-to-region 'disabled nil)
@@ -434,7 +458,7 @@ load-warning buffer in case of failure."
      (sh-heredoc :foreground "black" :background "#fff0f0")
      (sh-heredoc-face :foreground "black" :background "#fff0f0")
      (header-line :background "gray65")
      (sh-heredoc :foreground "black" :background "#fff0f0")
      (sh-heredoc-face :foreground "black" :background "#fff0f0")
      (header-line :background "gray65")
-     (highlight :background "turquoise")
+     (highlight :background "white")
      (message-cited-text-face :foreground "firebrick")
      (isearch :background "yellow" :foreground "black")
      (isearch-lazy-highlight-face' :background "yellow3" :foreground "black")
      (message-cited-text-face :foreground "firebrick")
      (isearch :background "yellow" :foreground "black")
      (isearch-lazy-highlight-face' :background "yellow3" :foreground "black")
@@ -454,7 +478,7 @@ load-warning buffer in case of failure."
      ;; (fringe :background "black" :foreground "gray90")
      (fringe :background "gray80")
      (ff/date-info-face :foreground "white")
      ;; (fringe :background "black" :foreground "gray90")
      (fringe :background "gray80")
      (ff/date-info-face :foreground "white")
-     (ff/battery-info-face :foreground "black")
+     (ff/battery-info-face :foreground "blue")
      (ff/battery-info-alarm-face :foreground "red")
      ;; (ff/mail-alarm-face :foreground "white" :background "red2")
      ;; (alarm-vc-face :foreground "black" :background "yellow" :weight 'normal)
      (ff/battery-info-alarm-face :foreground "red")
      ;; (ff/mail-alarm-face :foreground "white" :background "red2")
      ;; (alarm-vc-face :foreground "black" :background "yellow" :weight 'normal)
@@ -493,7 +517,7 @@ load-warning buffer in case of failure."
      (sh-heredoc :foreground "black" :background "#fff0f0")
      (sh-heredoc-face :foreground "black" :background "#fff0f0")
      (font-lock-keyword-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")
+     (highlight :background "white")
      (isearch :background "orange" :foreground "black")
      (isearch-lazy-highlight-face' :background "yellow" :foreground "black")
      ;; (display-time-mail-face :background "white")
      (isearch :background "orange" :foreground "black")
      (isearch-lazy-highlight-face' :background "yellow" :foreground "black")
      ;; (display-time-mail-face :background "white")
@@ -607,7 +631,7 @@ load-warning buffer in case of failure."
 (defun ff/alsa-sound (file)
   "Plays a sound with ALSA."
   (interactive)
 (defun ff/alsa-sound (file)
   "Plays a sound with ALSA."
   (interactive)
-  (process-kill-without-query (start-process-shell-command "aplay"
+  (process-query-on-exit-flag (start-process-shell-command "aplay"
                                                            nil
                                                            "aplay" "-q" file)))
 
                                                            nil
                                                            "aplay" "-q" file)))
 
@@ -622,24 +646,38 @@ load-warning buffer in case of failure."
 ;; then uncommenting would be very counter-intuitive).
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; then uncommenting would be very counter-intuitive).
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defun ff/comment-and-go-down (arg)
-  "Comments and goes down ARG lines."
-  (interactive "p")
-  (condition-case nil
-      (comment-region (point-at-bol) (point-at-eol)) (error nil))
-  (next-line 1)
-  (if (> arg 1) (ff/comment-and-go-down (1- arg))))
+;; (defun ff/comment-and-go-down (arg)
+;;   "Comments and goes down ARG lines."
+;;   (interactive "p")
+;;   (condition-case nil
+;;       (comment-region (point-at-bol) (point-at-eol)) (error nil))
+;;   (next-line 1)
+;;   (if (> arg 1) (ff/comment-and-go-down (1- arg))))
+;; 
+;; (defun ff/uncomment-and-go-up (arg)
+;;   "Uncomments and goes up ARG lines."
+;;   (interactive "p")
+;;   (condition-case nil
+;;       (uncomment-region (point-at-bol) (point-at-eol)) (error nil))
+;;   (next-line -1)
+;;   (if (> arg 1) (ff/uncomment-and-go-up (1- arg))))
+;; 
+;; (define-key global-map [(shift down)] 'ff/comment-and-go-down)
+;; (define-key global-map [(shift up)] 'ff/uncomment-and-go-up)
 
 
-(defun ff/uncomment-and-go-up (arg)
-  "Uncomments and goes up ARG lines."
-  (interactive "p")
-  (condition-case nil
-      (uncomment-region (point-at-bol) (point-at-eol)) (error nil))
-  (next-line -1)
-  (if (> arg 1) (ff/uncomment-and-go-up (1- arg))))
+(define-key global-map [(shift down)] 'comment-line)
 
 
-(define-key global-map [(shift down)] 'ff/comment-and-go-down)
-(define-key global-map [(shift up)] 'ff/uncomment-and-go-up)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun ff/show-compilation-buffer-split-window ()
+  "Split the window vertically and show the compilation buffer in the newly created right one"
+  (interactive)
+
+  (let ((b (get-buffer "*compilation*")))
+    (if b (display-buffer b)
+      (error "Cannot find a compilation buffer"))
+    )
+)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Counting various entities in text
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Counting various entities in text
@@ -805,12 +843,15 @@ printer."
 ;; Dealing with the laptop battery
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; Dealing with the laptop battery
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defcustom ff/battery-dirs '("/sys/class/power_supply/BAT0"
-                             "/sys/class/power_supply/BAT1")
+(defcustom ff/battery-dirs '("/sys/class/power_supply/BAT0")
   "*Where to gather the battery information")
 
 (defcustom ff/temperature-files '("/sys/class/thermal/thermal_zone0/temp"
   "*Where to gather the battery information")
 
 (defcustom ff/temperature-files '("/sys/class/thermal/thermal_zone0/temp"
-                                  "/sys/class/thermal/thermal_zone1/temp")
+                                  "/sys/class/thermal/thermal_zone1/temp"
+                                  "/sys/class/thermal/thermal_zone2/temp"
+                                  "/sys/class/thermal/thermal_zone3/temp"
+                                  "/sys/class/thermal/thermal_zone4/temp"
+                                  "/sys/class/thermal/thermal_zone5/temp")
   "*Where to gather the thermal information")
 
 (defun ff/file-first-line (file)
   "*Where to gather the thermal information")
 
 (defun ff/file-first-line (file)
@@ -902,8 +943,9 @@ printer."
                 )
               )
 
                 )
               )
 
-             ;; (`unknown "✱")
-             (`unknown "F")
+             (`unknown (propertize "☼" 'face 'ff/battery-info-face))
+             ;; (`unknown "☼")
+             ;; (`unknown "F")
              (_ "?"))
          (error nil))
        )
              (_ "?"))
          (error nil))
        )
@@ -912,45 +954,53 @@ printer."
 
 (defun ff/system-info () (interactive)
 
 
 (defun ff/system-info () (interactive)
 
-       (let ((buf (get-buffer-create "*system info*"))
-             (map (make-sparse-keymap)))
-
-         (define-key map "q" 'kill-this-buffer)
-         (display-buffer buf)
-         (set-buffer buf)
-         (setq show-trailing-whitespace nil)
-         (erase-buffer)
-
-         (let ((highlight nil))
-
-           (mapc (lambda (x)
-                   (insert
-                    (if (setq highlight (not highlight))
-                        (propertize
-                         (with-temp-buffer (apply 'call-process x)
-                                           (buffer-string))
-                         'face '(:background "#d0d0ff"))
-                      (with-temp-buffer (apply 'call-process x)
-                                        (buffer-string))
-                      ))
-                   )
+       (let* ((buf (get-buffer-create "*system info*"))
+              (win (get-buffer-window buf))
+              (map (make-sparse-keymap)))
+
+         (if win
+             (progn
+               (delete-window win)
+               (kill-buffer buf))
+
+           (define-key map "q" 'kill-this-buffer)
+           (display-buffer buf)
+           (set-buffer buf)
+           (setq show-trailing-whitespace nil)
+           (erase-buffer)
+
+           (let ((highlight nil))
+
+             (mapc (lambda (x)
+                     (insert
+                      (if (setq highlight (not highlight))
+                          (propertize
+                           (with-temp-buffer (apply 'call-process x)
+                                             (buffer-string))
+                           'face '(:background "#d0d0ff"))
+                        (with-temp-buffer (apply 'call-process x)
+                                          (buffer-string))
+                        ))
+                     )
 
 
-                 '(
-                   ("hostname" nil t nil "-f")
-                   ("acpi" nil t)
-                   ("df" nil t nil "-h")
-                   ;; ("mount" nil t)
-                   ("ifconfig" nil t)
-                   ("ssh-add" nil t nil "-l")
-                   )))
+                   '(
+                     ("hostname" nil t nil "-f")
+                     ("acpi" nil t)
+                     ("df" nil t nil "-h")
+                     ;; ("mount" nil t)
+                     ("ifconfig" nil t)
+                     ("ssh-add" nil t nil "-l")
+                     )))
 
 
-         (goto-char (point-min))
-         (while (re-search-forward "^$" nil t) (backward-delete-char 1))
+           (goto-char (point-min))
+           (while (re-search-forward "^$" nil t) (backward-delete-char 1))
 
 
-         (fit-window-to-buffer (get-buffer-window buf))
-         (use-local-map map)
-         (set-buffer-modified-p nil)
-         ))
+           (fit-window-to-buffer (get-buffer-window buf))
+           (use-local-map map)
+           (set-buffer-modified-p nil)
+           )
+         )
+       )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Display time
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Display time
@@ -995,7 +1045,7 @@ printer."
  )
 
 ;; Show the time, mail and stuff
  )
 
 ;; Show the time, mail and stuff
-(display-time)
+;; (display-time)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Moving through buffers
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Moving through buffers
@@ -1081,10 +1131,10 @@ In line mode: M-p previous line, M-n next line.")
     (term-set-escape-char ?\C-x)
 
     ;; I like the shell buffer and windows to be deleted when the
     (term-set-escape-char ?\C-x)
 
     ;; I like the shell buffer and windows to be deleted when the
-    ;; shell process terminates. It's a bit of a mess to acheive this.
+    ;; shell process terminates. It's a bit of a mess to achieve this.
 
     (let ((process (get-buffer-process (current-buffer))))
 
     (let ((process (get-buffer-process (current-buffer))))
-      (process-kill-without-query process)
+      (process-query-on-exit-flag process)
       (set-process-sentinel process
                             ;; 'ff/kill-associated-buffer-and-delete-windows
                             'ff/kill-associated-buffer
       (set-process-sentinel process
                             ;; 'ff/kill-associated-buffer-and-delete-windows
                             'ff/kill-associated-buffer
@@ -1128,9 +1178,9 @@ of commands in `ff/default-bash-commands' is used for auto-completion"
 (when (ff/load-or-alert "alarm-vc" t)
   (setq alarm-vc-mode-exceptions "^VM"))
 
 (when (ff/load-or-alert "alarm-vc" t)
   (setq alarm-vc-mode-exceptions "^VM"))
 
-(when (ff/load-or-alert "git")
-  (setq git-show-unknown nil)
-  )
+;; (when (ff/load-or-alert "git")
+  ;; (setq git-show-unknown nil)
+  ;; )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Makes .sh and others files executable automagically
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Makes .sh and others files executable automagically
@@ -1196,110 +1246,36 @@ goback argument, go back where we were."
 
 (load "vc-git")
 
 
 (load "vc-git")
 
-(defun ff/git-pull-push () (interactive)
+(defun ff/git-pull-push (universal) (interactive "P")
+       (message "black *.py ...")
+       (shell-command "black *.py" nil)
+       (when universal (shell-command "git commit -a -m \"Update.\"" nil))
        (message "git pull / push ...")
        (shell-command "git pull && git push" nil)
        (message "git pull / push ...")
        (shell-command "git pull && git push" nil)
+       ;;(async-shell-command "git remote get-url origin && git pull && git push" nil)
+       (message "All good captain")
        )
 
 (defun ff/git-pull () (interactive)
        )
 
 (defun ff/git-pull () (interactive)
+       (message "git pull ...")
        (shell-command "git pull" nil)
        )
 
 (define-key global-map [(control x) (v) (p)] 'ff/git-pull-push)
 (define-key global-map [(control x) (v) (P)] 'ff/git-pull)
 
        (shell-command "git pull" nil)
        )
 
 (define-key global-map [(control x) (v) (p)] 'ff/git-pull-push)
 (define-key global-map [(control x) (v) (P)] 'ff/git-pull)
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; The big stuff (bbdb, mailcrypt, etc.)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(setq bbdb-file "~/private/bbdb")
-
-(when (file-exists-p bbdb-file)
-
-  ;; Failsafe version if we can't load bbdb
-  (defun ff/explicit-name (email) email)
-
-  (when (ff/load-or-alert "bbdb")
-
-    (setq
-     ;; Stop asking (if not t or nil, will not ask)
-     bbdb-offer-save 'never
-     ;; I hate when bbdb decides to mess up my windows
-     bbdb-use-pop-up nil
-     ;; I have no problem with bbdb asking me if the sender email
-     ;; does not match exactly the address we have in the database
-     bbdb-quiet-about-name-mismatches 0
-     ;; I have european friends, too
-     bbdb-north-american-phone-numbers-p nil
-     ;; To cycle through all possible addresses
-     bbdb-complete-name-allow-cycling t
-     ;; Cycle with full names only, not through all net-addresses alone too
-     bbdb-dwim-net-address-allow-redundancy t
-     ;; Do not add new addresses automatically
-     bbdb-always-add-addresses nil
-     )
-
-    (defface ff/known-address-face
-      '((t (:foreground "blue2")))
-      "The face to display known mail identities.")
-
-    (defface ff/unknown-address-face
-      '((t (:foreground "gray50")))
-      "The face to display unknown mail identities.")
-
-    (defun ff/explicit-name (email)
-      "Returns a string identity for the first address in EMAIL. The
-identity is taken from bbdb if possible or from the address itself
-with mail-extract-address-components. The suffix \"& al.\" is added if
-there are more than one address.
-
-If no bbdb record is found, the name is propertized with the face
-ff/unknown-address-face. If a record is found and contains a note
-'face, the associated face is used, otherwise
-ff/known-address-face is used."
-
-      (and email
-           (let* ((data (mail-extract-address-components email))
-                  (name (car data))
-                  (net (cadr data))
-                  (record (bbdb-search-simple nil net)))
-
-             (concat
-
-              (condition-case nil
-                  (propertize (bbdb-record-name record)
-                              'face
-                              (or (cdr (assoc 'face
-                                              (bbdb-record-raw-notes record)))
-                                  'ff/known-address-face))
-                (error
-                 (propertize (or (and data (concat "<" net ">"))
-                                 "*undefined*")
-                             'face 'ff/unknown-address-face)
-                 ))
-              (if (string-match "," (mail-strip-quoted-names email)) " & al.")
-              )))
-      )
-
-    (ff/configure-faces '((ff/robot-address-face :foreground "green4")
-                          (ff/personal-address-face :foreground "dark magenta" :weight 'bold)
-                          (ff/important-address-face :foreground "red3"
-                                                     :weight 'bold
-                                                     )))
-
-    )
-  )
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; An encrypted file to put secure stuff (passwords, ...)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; An encrypted file to put secure stuff (passwords, ...)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(when (ff/load-or-alert "mailcrypt")
-  (mc-setversion "gpg")
-  ;; Keep the passphrase for 10min
-  (setq mc-passwd-timeout 600
-        ff/secure-note-file "~/private/secure-notes.gpg")
-  )
+(setq ff/secure-note-file "~/private/secure-notes.gpg")
+
+;; (when (ff/load-or-alert "mailcrypt")
+  ;; (mc-setversion "gpg")
+  ;; ;; Keep the passphrase for 10min
+  ;; (setq mc-passwd-timeout 600
+        ;; ff/secure-note-file "~/private/secure-notes.gpg")
+  ;; )
 
 (defface ff/secure-date
   '((t (:background "white" :weight bold)))
 
 (defface ff/secure-date
   '((t (:background "white" :weight bold)))
@@ -1400,7 +1376,7 @@ universal argument starts xfig even if the .fig does not exist"
                           '(("fig" . "xfig")
                             ("jpg" . "gimp" )
                             ("png" . "gimp") ("pgm" . "gimp") ("ppm" . "gimp")
                           '(("fig" . "xfig")
                             ("jpg" . "gimp" )
                             ("png" . "gimp") ("pgm" . "gimp") ("ppm" . "gimp")
-                            ("jpg" . "xv"))
+                            ("svg" . "inkscape"))
                           universal)
 
     (if (not (and (buffer-file-name) (string-match "\\(.*\\)\.tex$"
                           universal)
 
     (if (not (and (buffer-file-name) (string-match "\\(.*\\)\.tex$"
@@ -1414,22 +1390,31 @@ universal argument starts xfig even if the .fig does not exist"
                                     (append '("xdvi-for-latex" nil "xdvi")
                                             ff/xdvi-for-latex-options
                                             (list dvi-name))))
                                     (append '("xdvi-for-latex" nil "xdvi")
                                             ff/xdvi-for-latex-options
                                             (list dvi-name))))
-          (process-kill-without-query xdvi-process))))
+          (process-query-on-exit-flag xdvi-process))))
     ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Tex mode
 
 
-;; When working on a tex file with other people, I can just change
-;; ff/tex-command in the -*- part of the file so that I don't mess up
-;; other's people configuration.
+(defun ff/save-window-configuration (universal) (interactive "P")
+       (if universal
+           (progn
+             (setq ff/window-configuration (current-window-configuration))
+             (message "Window configuration stored")
+             )
+         (set-window-configuration ff/window-configuration))
+       )
+
+(define-key global-map [(control =)] 'ff/save-window-configuration)
 
 
-(defadvice tex-file (around ff/set-my-own-tex-command () activate)
-  (let ((tex-command
-         (or (and (boundp 'ff/tex-command)
-                  ff/tex-command)
-             tex-command)))
-    ad-do-it))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Tex mode
+
+;; (defadvice tex-file (around ff/set-my-own-tex-command () activate)
+  ;; (let ((ff/window-configuration-before-compilation (current-window-configuration)))
+    ;; ad-do-it
+    ;; (set-window-configuration ff/window-configuration-before-compilation)
+    ;; )
+  ;; )
 
 ;; This is a bit hardcore, but really I can't bear the superscripts in
 ;; my emacs window and could not find another way to deactivate them.
 
 ;; This is a bit hardcore, but really I can't bear the superscripts in
 ;; my emacs window and could not find another way to deactivate them.
@@ -1497,7 +1482,7 @@ universal argument starts xfig even if the .fig does not exist"
     ;; (ff/play-sound-async "~/local/sounds/short_la.wav")
     ))
 
     ;; (ff/play-sound-async "~/local/sounds/short_la.wav")
     ))
 
-(setq ring-bell-function 'ff/ring-bell)
+;; (setq ring-bell-function 'ff/ring-bell)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Past the content of the url currently in the kill-ring with
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Past the content of the url currently in the kill-ring with
@@ -1514,8 +1499,15 @@ universal argument starts xfig even if the .fig does not exist"
     (call-process "w3m" nil t nil "-dump" url))
   )
 
     (call-process "w3m" nil t nil "-dump" url))
   )
 
-(define-key global-map [(shift mouse-2)]
-  (lambda () (interactive) (ff/insert-url (current-kill 0))))
+;; (define-key global-map [(shift mouse-2)]
+  ;; (lambda () (interactive) (ff/insert-url (current-kill 0))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Trying to deal with cut-paste
+
+(setq x-select-enable-clipboard t)
+(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+(define-key global-map [(shift mouse-2)] 'clipboard-yank)
 
 ;; lookup-dict is one of my own scripts, check my web page
 
 
 ;; lookup-dict is one of my own scripts, check my web page
 
@@ -1545,29 +1537,32 @@ universal argument starts xfig even if the .fig does not exist"
   (goto-char (point-min))
   (insert "%% -*- mode: latex; mode: reftex; mode: flyspell; coding: utf-8; tex-command: \"pdflatex.sh\" -*-
 
   (goto-char (point-min))
   (insert "%% -*- mode: latex; mode: reftex; mode: flyspell; coding: utf-8; tex-command: \"pdflatex.sh\" -*-
 
-\\documentclass[12pt,a4paper,twoside]{article}
+\\documentclass[11pt,a4paper,twoside]{article}
 \\usepackage[a4paper,top=2.5cm,bottom=2cm,left=2.5cm,right=2.5cm]{geometry}
 \\usepackage[utf8]{inputenc}
 \\usepackage[a4paper,top=2.5cm,bottom=2cm,left=2.5cm,right=2.5cm]{geometry}
 \\usepackage[utf8]{inputenc}
-\\usepackage{amsmath}
-\\usepackage{amssymb}
+\\usepackage{amsmath,amssymb,dsfont}
 \\usepackage[pdftex]{graphicx}
 \\usepackage[pdftex]{graphicx}
-\\usepackage{microtype}
 \\usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=blue]{hyperref}
 \\usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=blue]{hyperref}
+\\usepackage[round]{natbib}
+\\usepackage{tikz}
+\\usetikzlibrary{arrows,arrows.meta,calc}
+\\usetikzlibrary{patterns,backgrounds}
+\\usetikzlibrary{positioning,fit}
+\\usetikzlibrary{shapes.geometric,shapes.multipart}
+\\usetikzlibrary{patterns.meta,decorations.pathreplacing,calligraphy}
+\\usetikzlibrary{tikzmark}
+\\usetikzlibrary{decorations.pathmorphing}
 
 \\setlength{\\parindent}{0cm}
 \\setlength{\\parskip}{12pt}
 
 \\setlength{\\parindent}{0cm}
 \\setlength{\\parskip}{12pt}
-\\renewcommand{\\baselinestretch}{1.3}
+%\\renewcommand{\\baselinestretch}{1.3}
+%\\setlength{\\tabcolsep}{0pt}
+%\\renewcommand{\\arraystretch}{1.0}
 
 \\def\\argmax{\\operatornamewithlimits{argmax}}
 \\def\\argmin{\\operatornamewithlimits{argmin}}
 
 \\def\\argmax{\\operatornamewithlimits{argmax}}
 \\def\\argmin{\\operatornamewithlimits{argmin}}
+\\def\\expect{\\mathds{E}}
 
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Open sans font
-%%\\usepackage[default]{opensans}
-%%\\usepackage{cmbright}
-%%\\renewcommand{\\familydefault}{fos}
-%%\\renewcommand{\\seriesdefault}{l}
-%%\\renewcommand{\\bfdefault}{sb}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% The \\todo command
 \\newcounter{nbdrafts}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% The \\todo command
 \\newcounter{nbdrafts}
@@ -1588,6 +1583,12 @@ universal argument starts xfig even if the .fig does not exist"
     (goto-char (point-max))
     (insert "
 
     (goto-char (point-max))
     (insert "
 
+\\bibliographystyle{abbrvnat}
+
+\\bibliography{dlc}
+
+\\checknbdrafts
+
 \\end{document}
 "))
   (latex-mode))
 \\end{document}
 "))
   (latex-mode))
@@ -1774,18 +1775,14 @@ require 'optim'
   "Adds all the stuff to start a new python file"
   (interactive)
   (goto-char (point-min))
   "Adds all the stuff to start a new python file"
   (interactive)
   (goto-char (point-min))
-  (insert "#!/usr/bin/env python-for-pytorch
+  (insert "#!/usr/bin/env python
 
 
-import torch
 import math
 
 import math
 
-from torch import nn
-from torch.nn import functional as fn
+import torch, torchvision
 
 
-from torch import Tensor
-from torch.autograd import Variable
-from torch.nn.parameter import Parameter
-from torch.nn import Module
+from torch import nn
+from torch.nn import functional as F
 
 ")
   (python-mode)
 
 ")
   (python-mode)
@@ -1867,7 +1864,7 @@ and refilling all the paragraphs."
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\\begin{frame}{")
+\\begin{frame}[fragile]{")
         (save-excursion (insert "}{}
 
 "))
         (save-excursion (insert "}{}
 
 "))
@@ -1875,7 +1872,7 @@ and refilling all the paragraphs."
 
     (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
     (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\\begin{frame}{")
+\\begin{frame}[fragile]{")
 
     (save-excursion (insert "}{}
 
 
     (save-excursion (insert "}{}
 
@@ -2117,7 +2114,7 @@ a file in /tmp"
 
 (setq compilation-read-command t
       compile-command "make -j -k"
 
 (setq compilation-read-command t
       compile-command "make -j -k"
-      compile-history '("make clean" "make DEBUG=yes -j -k" "make -j -k")
+      ;; compile-history '("make clean" "make DEBUG=yes -j -k" "make -j -k")
       )
 
 (defun ff/universal-compile (universal) (interactive "P")
       )
 
 (defun ff/universal-compile (universal) (interactive "P")
@@ -2134,6 +2131,17 @@ a file in /tmp"
 (define-key global-map [(shift f1)] 'compile)
 (define-key global-map [f2] 'next-error)
 
 (define-key global-map [(shift f1)] 'compile)
 (define-key global-map [f2] 'next-error)
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Horrible hack
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun dont-delay-compile-warnings (fun type &rest args)
+  (if (eq type 'bytecomp)
+      (let ((after-init-time t))
+        (apply fun type args))
+    (apply fun type args)))
+(advice-add 'display-warning :around #'dont-delay-compile-warnings)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Related to mail
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Related to mail
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2268,6 +2276,8 @@ This may be a useful alternative binding for \\[delete-other-windows]
 
 ;; Compiles the latex file in the current buffer
 
 
 ;; Compiles the latex file in the current buffer
 
+
+
 (setq tex-start-commands "\\input")
 (define-key global-map [f3] 'tex-file)
 (define-key global-map [(shift f3)] 'tex-bibtex-file)
 (setq tex-start-commands "\\input")
 (define-key global-map [f3] 'tex-file)
 (define-key global-map [(shift f3)] 'tex-bibtex-file)
@@ -2276,7 +2286,14 @@ This may be a useful alternative binding for \\[delete-other-windows]
 ;; buffer, and to edit the .fig or bitmap image used to generate the
 ;; .eps at point
 
 ;; buffer, and to edit the .fig or bitmap image used to generate the
 ;; .eps at point
 
-(define-key global-map [f4] 'ff/run-viewer)
+(defun ff/speech-whisper () (interactive)
+       (shell-command
+        (concat "speech-whisper.sh " (if current-input-method "fr" "en"))
+        (current-buffer)
+        )
+)
+
+(define-key global-map [f4] 'ff/speech-whisper)
 
 ;; Closes the current \begin{}
 
 
 ;; Closes the current \begin{}
 
@@ -2356,20 +2373,24 @@ current buffer and deletes the current window if it's not the
 only one in the frame. If the buffer has to be kept, go to the
 next one. With universal argument, kill all killable buffers."
   (interactive "P")
 only one in the frame. If the buffer has to be kept, go to the
 next one. With universal argument, kill all killable buffers."
   (interactive "P")
-  (if universal
-      (let ((nb-killed 0))
-        (mapc (lambda (x)
-                (unless (string-match ff/kill-this-buffer-and-delete-window-exceptions
-                                      (buffer-name x))
-                  (kill-buffer x)
-                  (setq nb-killed (1+ nb-killed))
-                  ))
-              (buffer-list))
-        (message "Killed %d buffer%s" nb-killed (if (> nb-killed 1) "s" "")))
-    (if (string-match ff/kill-this-buffer-and-delete-window-exceptions (buffer-name))
-        (ff/next-buffer)
-      (kill-this-buffer)))
-  (unless (one-window-p t) (delete-window))
+  (unless (minibuffer-window-active-p (selected-window))
+    (if universal
+        (let ((nb-killed 0))
+          (mapc (lambda (x)
+                  (unless (string-match ff/kill-this-buffer-and-delete-window-exceptions
+                                        (buffer-name x))
+                    (kill-buffer x)
+                    (setq nb-killed (1+ nb-killed))
+                    ))
+                (buffer-list))
+          (message "Killed %d buffer%s" nb-killed (if (> nb-killed 1) "s" "")))
+      (if (string-match ff/kill-this-buffer-and-delete-window-exceptions (buffer-name))
+          (ff/next-buffer)
+        (let ((kill-buffer-query-functions nil))
+          (kill-this-buffer))
+        ))
+    (unless (one-window-p t) (delete-window))
+    )
   )
 
 (define-key global-map [(control backspace)] 'ff/kill-this-buffer-and-delete-window)
   )
 
 (define-key global-map [(control backspace)] 'ff/kill-this-buffer-and-delete-window)
@@ -2418,7 +2439,7 @@ next one. With universal argument, kill all killable buffers."
                               '(
                                 ff/file-not-remote-but-symlink
                                 "enotes$" "secure-notes$" "media-playlists$"
                               '(
                                 ff/file-not-remote-but-symlink
                                 "enotes$" "secure-notes$" "media-playlists$"
-                                "bbdb$"
+                                ;; "bbdb$"
                                 "svn-commit.tmp$" ".git/COMMIT_EDITMSG$"
                                 "\.bbl$" "\.aux$" "\.toc$"
                                 ))
                                 "svn-commit.tmp$" ".git/COMMIT_EDITMSG$"
                                 "\.bbl$" "\.aux$" "\.toc$"
                                 ))
@@ -2455,7 +2476,8 @@ next one. With universal argument, kill all killable buffers."
 
   (define-key global-map [(meta \\)] 'media)
 
 
   (define-key global-map [(meta \\)] 'media)
 
-  (setq media/expert t
+  (setq media/mplayer/executable "mpv"
+        media/expert t
         media/add-current-song-to-interrupted-when-killing t
         media/duration-to-history 30
         media/history-size 1000
         media/add-current-song-to-interrupted-when-killing t
         media/duration-to-history 30
         media/history-size 1000
@@ -2634,6 +2656,14 @@ with a time tag, and save this file"
 (setq ff/map (make-sparse-keymap))
 (define-key global-map [(control \`)] ff/map)
 
 (setq ff/map (make-sparse-keymap))
 (define-key global-map [(control \`)] ff/map)
 
+;; (defun ff/start-stop-macro-recording () (interactive)
+  ;; (if (or defining-kbd-macro executing-kbd-macro)
+      ;; (kmacro-end-macro)
+    ;; (kmacro-start-macro))
+  ;; )
+
+;; (define-key global-map [(shift return)] 'ff/start-stop-macro-recording)
+
 (unless window-system
   ;; (define-key global-map [(control @)] ff/map)
   (define-key global-map [(meta O) \`] ff/map)
 (unless window-system
   ;; (define-key global-map [(control @)] ff/map)
   (define-key global-map [(meta O) \`] ff/map)
@@ -2653,16 +2683,17 @@ with a time tag, and save this file"
          (error "No file attached to this buffer")))
 
 (defun ff/insert-date (&optional universal) (interactive "P")
          (error "No file attached to this buffer")))
 
 (defun ff/insert-date (&optional universal) (interactive "P")
-       ;; (insert (format-time-string "\n * %Y %b %d %H:%M:%S\n\n" (current-time)))
-       ;; (insert (format-time-string "%Y %b %d %H:%M:%S" (current-time)))
-       ;; (insert (format-time-string "%d.%m.%y" (current-time)))
-       (if universal
-           (insert (format-time-string "%d.%m.%Y %H:%M:%S" (current-time)))
-         (insert (format-time-string "%d.%m.%Y" (current-time))))
+       (insert (format-time-string "\n * %H:%M:%S %A %B %d, %Y\n\n" (current-time)))
+       ;; ;; (insert (format-time-string "%Y %b %d %H:%M:%S" (current-time)))
+       ;; ;; (insert (format-time-string "%d.%m.%y" (current-time)))
+       ;; (if universal
+           ;; (insert (format-time-string "%d.%m.%Y %H:%M:%S" (current-time)))
+         ;; (insert (format-time-string "%d.%m.%Y" (current-time))))
        )
 
        )
 
-(define-key ff/map [(control g)] 'ff/git-status)
-(define-key ff/map [(control w)] 'server-edit)
+(define-key ff/map [(control g)] 'magit)
+;;(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 "d" 'ff/insert-date)
 (define-key ff/map [(control d)] 'ff/elisp-debug-on)
 ;; (define-key ff/map "d" 'diary)
 (define-key ff/map "d" 'ff/insert-date)
@@ -2674,7 +2705,8 @@ with a time tag, and save this file"
 (define-key ff/map [(control a)] 'auto-fill-mode)
 (define-key ff/map [(control i)] 'ff/system-info)
 (define-key ff/map "w" 'ff/word-occurences)
 (define-key ff/map [(control a)] 'auto-fill-mode)
 (define-key ff/map [(control i)] 'ff/system-info)
 (define-key ff/map "w" 'ff/word-occurences)
-(define-key ff/map [(control c)] 'calendar)
+;; (define-key ff/map [(control c)] 'calendar)
+(define-key ff/map [(control c)] 'ff/show-compilation-buffer-split-window)
 ;; (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 c)] (lambda () (interactive) (save-excursion (calendar))))
 (define-key ff/map [(control l)] 'goto-line)
 (define-key ff/map "l" 'longlines-mode)
@@ -2686,7 +2718,7 @@ with a time tag, and save this file"
 (define-key ff/map "c" 'ff/count-char)
 (define-key ff/map [(control p)] 'ff/print-to-file)
 (define-key ff/map "P" 'ff/print-to-printer)
 (define-key ff/map "c" 'ff/count-char)
 (define-key ff/map [(control p)] 'ff/print-to-file)
 (define-key ff/map "P" 'ff/print-to-printer)
-(define-key ff/map [(control b)] 'bbdb)
+;; (define-key ff/map [(control b)] 'bbdb)
 (define-key ff/map "m" 'ff/selector-mail-from-bbdb)
 (define-key ff/map [(control m)] 'woman)
 (define-key ff/map "b" 'bookmark-jump)
 (define-key ff/map "m" 'ff/selector-mail-from-bbdb)
 (define-key ff/map [(control m)] 'woman)
 (define-key ff/map "b" 'bookmark-jump)
@@ -2881,20 +2913,19 @@ With argument ARG, do this that many times."
 
 ;; enotes.el is one of my own scripts, check my web page
 
 
 ;; enotes.el is one of my own scripts, check my web page
 
-(when (ff/load-or-alert "enotes" t)
-  (setq enotes/file "~/private/enotes"
-        enotes/show-help nil
-        enotes/full-display nil
-        enotes/default-time-fields "9:30")
-
-  (enotes/init)
-  ;; (add-hook 'enotes/alarm-hook
-  ;;  (lambda () (ff/play-sound-async "~/local/sounds/three_notes2.wav")))
+;; ** ;; (when (ff/load-or-alert "enotes" t)
+;; ** ;;   (setq enotes/file "~/private/enotes"
+;; ** ;;         enotes/show-help nil
+;; ** ;;         enotes/full-display nil
+;; ** ;;         enotes/default-time-fields "9:30")
+;; ** ;; 
+;; ** ;;   (enotes/init)
+;; ** ;;   )
+
+(when (ff/load-or-alert "goto-last-change.el")
+  (define-key global-map [(control -)] 'goto-last-change)
   )
 
   )
 
-;; (when (ff/load-or-alert "goto-last-change.el")
-;; (define-key global-map [(control x) (control a)] 'goto-last-change))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; My private stuff (email adresses, mail filters, etc.)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; My private stuff (email adresses, mail filters, etc.)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2906,15 +2937,23 @@ With argument ARG, do this that many times."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; Runs in server mode, so that emacsclient works
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; Runs in server mode, so that emacsclient works
-(server-start)
+;; ;;(server-start)
 
 
-(defun ff/raise-frame-and-give-focus ()
-  (when window-system
-    (raise-frame)
-    (x-focus-frame (selected-frame))
-    (set-mouse-pixel-position (selected-frame) 4 4)
-    ))
+;; (defun ff/raise-frame-and-give-focus ()
+  ;; (when window-system
+    ;; (raise-frame)
+    ;; (x-focus-frame (selected-frame))
+    ;; (set-mouse-pixel-position (selected-frame) 4 4)
+    ;; ))
+
+;; ;; Raises the window when the server is invoked
+
+;; (add-hook 'server-switch-hook 'ff/raise-frame-and-give-focus)
 
 
-;; Raises the window when the server is invoked
+(defun ff/black-current-file () (interactive)
+  (save-buffer)
+  (shell-command (concat "black " (buffer-file-name)))
+  (revert-buffer nil t)
+)
 
 
-(add-hook 'server-switch-hook 'ff/raise-frame-and-give-focus)
+(define-key ff/map [(control b)] 'ff/black-current-file)