X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=elisp.git;a=blobdiff_plain;f=emacs.el;h=5d30a6e40930bb702d8c9f3a73d2831bbe16bb14;hp=99c5e54ee65b8e569b8b0738040b4c17c830873e;hb=HEAD;hpb=2439cdd60f235b3ccde4ddc47c740e3c9ee43b99 diff --git a/emacs.el b/emacs.el index 99c5e54..96874b0 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-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 @@ -345,6 +363,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) @@ -434,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") @@ -454,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) @@ -493,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") @@ -598,6 +619,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 +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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -803,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) @@ -900,8 +938,9 @@ printer." ) ) - ;; (`unknown "✱") - (`unknown "F") + (`unknown (propertize "☼" 'face 'ff/battery-info-face)) + ;; (`unknown "☼") + ;; (`unknown "F") (_ "?")) (error nil)) ) @@ -910,45 +949,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 @@ -970,9 +1017,9 @@ printer." ,@(when (ff/battery-info-string) '((ff/battery-info-string))) - ;; '((propertize - ;; (ff/battery-info-string) - ;; 'face 'ff/battery-info-face))) + ;; '((propertize + ;; (ff/battery-info-string) + ;; 'face 'ff/battery-info-face))) " " @@ -1126,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 @@ -1183,45 +1230,72 @@ goback argument, go back where we were." (define-key global-map [(meta G)] (lambda () (interactive) (ff/goto-function-definition t))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; (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 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-pull-push) +(define-key global-map [(control x) (v) (P)] 'ff/git-pull) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; The big stuff (bbdb, mailcrypt, etc.) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Failsafe version if we can't load bbdb -(defun ff/explicit-name (email) email) +(setq bbdb-file "~/private/bbdb") -(load "vc-git") +(when (file-exists-p bbdb-file) -(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 - ) + ;; Failsafe version if we can't load bbdb + (defun ff/explicit-name (email) email) - (defface ff/known-address-face - '((t (:foreground "blue2"))) - "The face to display known mail identities.") + (when (with-no-warnings (ff/load-or-alert "bbdb")) - (defface ff/unknown-address-face - '((t (:foreground "gray50"))) - "The face to display unknown mail identities.") + (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 + ) - (defun ff/explicit-name (email) - "Returns a string identity for the first address in EMAIL. The + (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. @@ -1231,47 +1305,50 @@ 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))) + (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.") + ))) + ) - (concat + (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 + ))) - (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, ...) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(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))) @@ -1372,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$" @@ -1390,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)) + ) + +(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. @@ -1409,6 +1495,41 @@ universal argument starts xfig even if the .fig does not exist" (load "tex-mode") (defun tex-font-lock-suscript (pos) ()) +;; Automagically add the frame numbers in comments in a beamer file + +(defun ff/number-beamer-frames () + "Add the frame numbers as comments after each \begin{frame}" + (interactive) + + (save-excursion + (let ((total 0) + (n 1)) + + ;; First, clean-up existing numbering + (goto-char (point-min)) + (while (re-search-forward "^ *\\\\begin{frame}.*\\( %% frame [0-9]* / [0-9]*\\)$" nil t) + (kill-region (match-beginning 1) (match-end 1)) + ) + + ;; Then count the total number of frames + (goto-char (point-min)) + (while (re-search-forward "^ *\\\\begin{frame}" nil t) + (setq total (+ total 1)) + ) + + ;; Then, add the updated numbers + (goto-char (point-min)) + (while (re-search-forward "^ *\\\\begin{frame}" nil t) + (move-end-of-line 1) + (insert " %% frame " (prin1-to-string n) " / " (prin1-to-string total)) + (setq n (+ n 1)) + ) + ) + ) + + (message "Added frame numbers in comments.") + ) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Prevents many errors from beeping and makes the others play a nifty ;; sound @@ -1434,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 @@ -1451,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 @@ -1482,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} @@ -1525,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)) @@ -1700,17 +1832,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." @@ -1753,9 +1898,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 " << \" " @@ -1780,17 +1923,31 @@ and refilling all the paragraphs." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defun ff/start-slide () - (interactive) - (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +(defun ff/start-slide (universal) + (interactive "P") -\\begin{frame}{") + (if universal + (progn + (insert "\\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - (save-excursion (insert "}{} +\\begin{frame}[fragile]{") + (save-excursion (insert "}{} + +")) + ) + + (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\\begin{frame}[fragile]{") + + (save-excursion (insert "}{} \\end{frame} ")) + ) ) (add-hook @@ -1910,6 +2067,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) @@ -2020,7 +2182,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") @@ -2037,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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -2171,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) @@ -2505,12 +2680,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") @@ -2534,6 +2712,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) @@ -2553,16 +2739,17 @@ 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 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) @@ -2574,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) @@ -2591,6 +2779,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 "=" 'ff/number-beamer-frames) (define-key ff/map [(control shift b)] (lambda () (interactive) (bookmark-set) @@ -2773,28 +2962,26 @@ With argument ARG, do this that many times." ;; Privacy ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Where to save the bookmarks and where is bbdb +;; Where to save the bookmarks (setq bookmark-default-file (concat ff/emacs-dir "/bmk") - bbdb-file "~/private/bbdb" custom-file (concat ff/emacs-dir "/custom")) ;; 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.) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -2806,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)