Update.
[elisp.git] / emacs.el
index 1bfffc3..96874b0 100644 (file)
--- a/emacs.el
+++ b/emacs.el
 ;; 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
 
 ;; Xft.antialias: true
 ;; Xft.rgba: rgb
 
-;; (set-default-font "Inconsolata 15")
+;;(set-frame-font "Inconsolata 14")
 
 ;; (package-initialize)
 
-(set-default-font "Bitstream vera sans mono-12")
+;; (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")
@@ -58,8 +63,8 @@
 
 ;; 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
@@ -88,6 +93,8 @@
 ;; use colorization for all modes
 (global-font-lock-mode t)
 
+;; (load "auctex")
+
 (setq font-lock-maximum-decoration 3
       ;;'((latex-mode . 2) (t . 2))
       )
@@ -123,11 +130,16 @@ uses `load-path' to find it."
       (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"))
-                (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)))
@@ -184,7 +196,7 @@ load-warning buffer in case of failure."
  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
@@ -231,6 +243,10 @@ load-warning buffer in case of failure."
  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"
@@ -249,9 +265,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
-
  )
 
+(custom-set-variables
+ '(query-replace-from-to-separator nil))
+
 ;; The backups
 
 (setq
@@ -437,7 +455,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")
-     (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")
@@ -457,7 +475,7 @@ load-warning buffer in case of failure."
      ;; (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)
@@ -496,7 +514,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")
-     (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")
@@ -644,6 +662,18 @@ load-warning buffer in case of failure."
 (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 (show-buffer (split-window-right) b)
+      (error "Cannot find a compilation buffer"))
+    )
+)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Counting various entities in text
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -808,12 +838,15 @@ printer."
 ;; 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"
-                                  "/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)
@@ -905,8 +938,9 @@ printer."
                 )
               )
 
-             ;; (`unknown "✱")
-             (`unknown "F")
+             (`unknown (propertize "☼" 'face 'ff/battery-info-face))
+             ;; (`unknown "☼")
+             ;; (`unknown "F")
              (_ "?"))
          (error nil))
        )
@@ -1139,9 +1173,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 "git")
-  (setq git-show-unknown nil)
-  )
+;; (when (ff/load-or-alert "git")
+  ;; (setq git-show-unknown nil)
+  ;; )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Makes .sh and others files executable automagically
@@ -1207,9 +1241,10 @@ goback argument, go back where we were."
 
 (load "vc-git")
 
-(defun ff/git-pull-push () (interactive)
+(defun ff/git-pull-push (universal) (interactive "P")
+       (when universal (shell-command "git commit -a -m \"Update.\"" 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)
        )
 
 (defun ff/git-pull () (interactive)
@@ -1231,7 +1266,7 @@ goback argument, go back where we were."
   ;; Failsafe version if we can't load bbdb
   (defun ff/explicit-name (email) email)
 
-  (when (ff/load-or-alert "bbdb")
+  (when (with-no-warnings (ff/load-or-alert "bbdb"))
 
     (setq
      ;; Stop asking (if not t or nil, will not ask)
@@ -1306,12 +1341,14 @@ ff/known-address-face is used."
 ;; 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)))
@@ -1412,7 +1449,7 @@ universal argument starts xfig even if the .fig does not exist"
                           '(("fig" . "xfig")
                             ("jpg" . "gimp" )
                             ("png" . "gimp") ("pgm" . "gimp") ("ppm" . "gimp")
-                            ("jpg" . "xv"))
+                            ("svg" . "inkscape"))
                           universal)
 
     (if (not (and (buffer-file-name) (string-match "\\(.*\\)\.tex$"
@@ -1430,18 +1467,27 @@ universal argument starts xfig even if the .fig does not exist"
     ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; 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))
+       )
 
-(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))
+(define-key global-map [(control =)] 'ff/save-window-configuration)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; 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.
@@ -1509,7 +1555,7 @@ universal argument starts xfig even if the .fig does not exist"
     ;; (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
@@ -1526,8 +1572,15 @@ universal argument starts xfig even if the .fig does not exist"
     (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
 
@@ -1557,29 +1610,27 @@ 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\" -*-
 
-\\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{amsmath}
-\\usepackage{amssymb}
+\\usepackage{amsmath,amssymb,dsfont}
 \\usepackage[pdftex]{graphicx}
-\\usepackage{microtype}
 \\usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=blue]{hyperref}
+\\usepackage{tikz}
+\\usepackage[round]{natbib}
+\\usepackage{cmbright}
+%\\usepackage{showframe}
 
 \\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\\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}
@@ -1600,6 +1651,12 @@ universal argument starts xfig even if the .fig does not exist"
     (goto-char (point-max))
     (insert "
 
+\\bibliographystyle{abbrvnat}
+
+\\bibliography{dlc}
+
+\\checknbdrafts
+
 \\end{document}
 "))
   (latex-mode))
@@ -1786,23 +1843,15 @@ require 'optim'
   "Adds all the stuff to start a new python file"
   (interactive)
   (goto-char (point-min))
-  (insert "#!/usr/bin/env python-for-pytorch
-
-import torch, torchvision
+  (insert "#!/usr/bin/env python
 
 import math
 
+import torch, torchvision
+
 from torch import nn
 from torch.nn import functional as F
 
-from torch import Tensor
-from torch import Tensor as T
-
-from torch.autograd import Variable
-from torch.autograd import Variable as V
-from torch.nn.parameter import Parameter
-from torch.nn import Module
-
 ")
   (python-mode)
   )
@@ -1883,7 +1932,7 @@ and refilling all the paragraphs."
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\\begin{frame}{")
+\\begin{frame}[fragile]{")
         (save-excursion (insert "}{}
 
 "))
@@ -1891,7 +1940,7 @@ and refilling all the paragraphs."
 
     (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\\begin{frame}{")
+\\begin{frame}[fragile]{")
 
     (save-excursion (insert "}{}
 
@@ -2150,6 +2199,17 @@ a file in /tmp"
 (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
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2284,6 +2344,8 @@ This may be a useful alternative binding for \\[delete-other-windows]
 
 ;; 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)
@@ -2677,15 +2739,16 @@ with a time tag, and save this file"
          (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 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)
@@ -2698,7 +2761,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 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)
@@ -2929,15 +2993,15 @@ With argument ARG, do this that many times."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; 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
+;; ;; Raises the window when the server is invoked
 
-(add-hook 'server-switch-hook 'ff/raise-frame-and-give-focus)
+;; (add-hook 'server-switch-hook 'ff/raise-frame-and-give-focus)