Update
[elisp.git] / emacs.el
index 2271f58..e9c9969 100644 (file)
--- a/emacs.el
+++ b/emacs.el
 ;; Xft.antialias: true
 ;; Xft.rgba: rgb
 
-;; (set-default-font "Inconsolata 15")
+(set-default-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")
@@ -231,6 +231,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"
@@ -345,6 +349,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 'markdown-mode-hook 'flyspell-mode)
+(add-hook 'markdown-mode-hook 'auto-fill-mode)
+
 ;; I am a power-user
 
 (put 'narrow-to-region 'disabled nil)
@@ -598,6 +605,8 @@ load-warning buffer in case of failure."
 
 (define-key global-map [(control c) (control q)] 'ff/delete-trailing-whitespaces-and-indent)
 
+(define-key global-map [(control x) (control o)] 'other-window)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Playing sounds
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -639,6 +648,14 @@ 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)
+  (show-buffer (split-window-right) "*compilation*")
+)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Counting various entities in text
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -803,12 +820,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)
@@ -910,45 +930,53 @@ printer."
 
 (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
@@ -1184,17 +1212,40 @@ goback argument, go back where we were."
                                     (ff/goto-function-definition t)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; The big stuff (bbdb, mailcrypt, etc.)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; (setq python-indent-offset 4)
+
+;; (define-key python-mode-map [(shift right)] 'python-indent-shift-right)
+;; (define-key python-mode-map [(shift left)] 'python-indent-shift-left)
+;; (define-key python-mode-map [(shift right)] 'indent-rigidly-right-to-tab-stop)
+;; (define-key python-mode-map [(shift left)] 'indent-rigidly-left-to-tab-stop)
 
 (load "vc-git")
 
+(defun ff/git-pull-push (universal) (interactive "P")
+       (when universal (shell-command "git commit -a -m \"Update\"" nil))
+       (message "git pull / push ...")
+       (async-shell-command "git pull && git push" nil)
+       )
+
+(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)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; The big stuff (bbdb, mailcrypt, etc.)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 (setq bbdb-file "~/private/bbdb")
 
-(if (file-exists-p bbdb-file)
+(when (file-exists-p bbdb-file)
 
-    ;; Failsafe version if we can't load bbdb
-    (defun ff/explicit-name (email) email)
+  ;; Failsafe version if we can't load bbdb
+  (defun ff/explicit-name (email) email)
 
   (when (ff/load-or-alert "bbdb")
 
@@ -1271,12 +1322,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)))
@@ -1416,7 +1469,7 @@ universal argument starts xfig even if the .fig does not exist"
 
 ;; Automagically add the frame numbers in comments in a beamer file
 
-(defun number-beamer-frames ()
+(defun ff/number-beamer-frames ()
   "Add the frame numbers as comments after each \begin{frame}"
   (interactive)
 
@@ -1534,6 +1587,8 @@ universal argument starts xfig even if the .fig does not exist"
 \\setlength{\\parindent}{0cm}
 \\setlength{\\parskip}{12pt}
 \\renewcommand{\\baselinestretch}{1.3}
+%\\setlength{\\tabcolsep}{0pt}
+%\\renewcommand{\\arraystretch}{1.0}
 
 \\def\\argmax{\\operatornamewithlimits{argmax}}
 \\def\\argmin{\\operatornamewithlimits{argmin}}
@@ -1740,17 +1795,30 @@ int main(int argc, char **argv) {
 
 require 'torch'
 require 'nn'
-require 'nnx'
-require 'optim'
 require 'image'
-require 'pl'
-require 'paths'
-require 'ffmpeg'
+require 'optim'
 
 ")
   (lua-mode)
   )
 
+(defun ff/start-python ()
+  "Adds all the stuff to start a new python file"
+  (interactive)
+  (goto-char (point-min))
+  (insert "#!/usr/bin/env python
+
+import math
+
+import torch, torchvision
+
+from torch import nn
+from torch.nn import functional as F
+
+")
+  (python-mode)
+  )
+
 
 (defun ff/start-html ()
   "Adds all that stuff to start a new HTML file."
@@ -1793,9 +1861,7 @@ the function is invoked with a universal arg"
   (interactive "P")
   (let ((line (if arg "cerr" "cout")))
     (goto-char (point-at-bol))
-    ;; Regexp syntax sucks moose balls, honnest. To match '[', just
-    ;; put it as the first char in the [...] ... This leads to some
-    ;; obvious things like the following
+    ;; To match '[', put it as the first char in the [...]
     (while (re-search-forward "\\([][a-zA-Z0-9_.:\(\)]+\\)" (point-at-eol) t)
       (setq line
             (concat line " << \" "
@@ -1964,6 +2030,11 @@ a file in /tmp"
              (ff/start-lua)
              )
 
+           (when (string-match "\\.py$" filename)
+             (python-mode)
+             (ff/start-python)
+             )
+
            (when (string-match "\\.html$" filename)
              (html-mode)
              (ff/start-html)
@@ -2074,7 +2145,7 @@ a file in /tmp"
 
 (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")
@@ -2559,12 +2630,15 @@ proposes to visit them."
 ;; The fridge!
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defun ff/move-region-to-fridge () (interactive)
+(defun ff/move-region-to-fridge (&optional universal) (interactive "P")
        "Cut the current region, paste it in a file called ./fridge
 with a time tag, and save this file"
        (unless (use-region-p) (error "No region selected"))
        (let ((bn (file-name-nondirectory (buffer-file-name))))
-         (kill-region (region-beginning) (region-end))
+         (if universal
+             (copy-region-as-kill (region-beginning) (region-end))
+           (kill-region (region-beginning) (region-end))
+           )
          (with-current-buffer (find-file-noselect "fridge")
            (goto-char (point-max))
            (insert "\n")
@@ -2588,6 +2662,14 @@ with a time tag, and save this file"
 (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)
@@ -2607,16 +2689,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 w)] 'server-edit)
+;; (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)
@@ -2628,7 +2710,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)
@@ -2645,7 +2728,7 @@ with a time tag, and save this file"
 (define-key ff/map [(control m)] 'woman)
 (define-key ff/map "b" 'bookmark-jump)
 (define-key ff/map [(control =)] 'calc)
-(define-key ff/map "=" 'number-beamer-frames)
+(define-key ff/map "=" 'ff/number-beamer-frames)
 (define-key ff/map [(control shift b)]
   (lambda () (interactive)
     (bookmark-set)
@@ -2835,20 +2918,19 @@ With argument ARG, do this that many times."
 
 ;; 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.)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;