X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=elisp.git;a=blobdiff_plain;f=emacs.el;h=1157e3296ed69bb722b6763c50a33beeec914f48;hp=f95d7b7a09d4919ee2e48c141d27d6da55f2c32e;hb=0e98e70c3917573bd05b5318144698c6d1f13a2b;hpb=b8a81e4490d3fde30165e8596b4c1eb88268b19e diff --git a/emacs.el b/emacs.el index f95d7b7..1157e32 100644 --- a/emacs.el +++ b/emacs.el @@ -18,6 +18,11 @@ ;; Contact 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 @@ -31,11 +36,11 @@ ;; 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") @@ -123,11 +128,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 +194,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 +241,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 +263,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 @@ -345,6 +361,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) @@ -641,6 +660,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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -805,12 +832,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) @@ -912,45 +942,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 @@ -1196,15 +1234,18 @@ goback argument, go back where we were." (load "vc-git") -(defun ff/git-push () (interactive) - (shell-command "git pull && git push" nil) +(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 remote get-url origin && 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-push) +(define-key global-map [(control x) (v) (p)] 'ff/git-pull-push) (define-key global-map [(control x) (v) (P)] 'ff/git-pull) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1218,7 +1259,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) @@ -1293,12 +1334,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))) @@ -1419,16 +1462,12 @@ 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. - -(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)) +;; (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. @@ -1496,7 +1535,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 @@ -1513,8 +1552,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 @@ -1556,6 +1602,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}} @@ -1775,16 +1823,12 @@ require 'optim' (goto-char (point-min)) (insert "#!/usr/bin/env python -import torch 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) @@ -1832,9 +1876,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 " << \" " @@ -2118,7 +2160,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") @@ -2269,6 +2311,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) @@ -2603,12 +2647,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") @@ -2632,6 +2679,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) @@ -2651,16 +2706,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) @@ -2672,7 +2727,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) @@ -2879,20 +2935,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.) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;