X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=emacs.el;h=e9c9969d750214ca79e862b6e98ec40c0e029a6f;hb=44ee31af3c67a477c92d749c462e5ebb92d8397f;hp=bf6da94103435024c8e7c21278f3d8242868ee6e;hpb=fc2642e34fec0d82c0d8ce6d6bc9e6859fadac7e;p=elisp.git diff --git a/emacs.el b/emacs.el index bf6da94..e9c9969 100644 --- a/emacs.el +++ b/emacs.el @@ -31,12 +31,15 @@ ;; Xft.antialias: true ;; Xft.rgba: rgb -;; (set-default-font "Bitstream vera sans mono-12") +(set-default-font "Inconsolata 14") + +;; (package-initialize) + +;; (set-default-font "Bitstream vera sans mono 12") ;; (set-default-font "Liberation Mono-13") -(set-default-font "Inconsolata 15") -;;(set-default-font "DejaVu sans mono 11") -;;(set-default-font "Droid sans mono 13") -;;(set-default-font "Opensans 10") +;; (set-default-font "DejaVu sans mono 15") +;; (set-default-font "Droid sans mono 13") +;; (set-default-font "Opensans 10") (when (fboundp 'horizontal-scroll-bar-mode) (horizontal-scroll-bar-mode -1)) @@ -228,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" @@ -328,6 +335,8 @@ load-warning buffer in case of failure." ;; What modes for what file extentions (add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode)) +(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) + (require 'org-table) (add-to-list 'auto-mode-alist '("\\.txt\\'" . (lambda() @@ -337,8 +346,12 @@ load-warning buffer in case of failure." (flyspell-mode)))) (add-hook 'c++-mode-hook 'flyspell-prog-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) @@ -383,14 +396,6 @@ load-warning buffer in case of failure." ;; "tool" bar? Are you kidding? (when (fboundp 'tool-bar-mode) (tool-bar-mode -1)) -;; ;; If my own letter icon is here, use it and change its color -;; (when (file-exists-p "~/local/share/emacs/letter.xbm") -;; (setq-default display-time-mail-icon -;; (find-image -;; '((:type xbm -;; :file "~/local/share/emacs/letter.xbm" -;; :ascent center))))) - ;; My funky setting of face colors. Basically, we switch to a sober ;; look and darken a bit the colors which need to (because of the ;; darker background) @@ -405,76 +410,11 @@ load-warning buffer in case of failure." ;; Not the same in xterm (which is gray in my case) and in ;; X-window -(unless window-system - ;; (xterm-mouse-mode 1) - (ff/configure-faces - '((italic :underline nil) - (info-title-2 :foreground "green") - (font-lock-comment-delimiter-face :foreground "green") - (font-lock-comment-face :foreground "green") - (cperl-array-face :background "gray90" :foreground "blue" :weight 'bold) - (cperl-hash-face :background "gray90" :foreground "purple" :weight 'bold) - (diff-added :background "gray90" :foreground "green4" :weight 'bold) - (diff-removed :background "gray90" :foreground "red2" :weight 'bold) - (diff-changed :background "gray90" :foreground "blue" :weight 'bold) - (diff-file-header-face :background "white" :foreground "black" - :weight 'bold) - (diff-header-face :background "white" :foreground "black") - (diff-hunk-header-face :background "white" :foreground "black") - (diff-indicator-removed :foreground "red" :weight 'bold) - (diff-removed :foreground "red" :weight 'bold) - (diff-indicator-added :foreground "blue" :weight 'bold) - (diff-added :foreground "blue" :weight 'bold) - (font-lock-string-face :foreground "green") - (font-lock-variable-name-face :foreground "blue") - (font-lock-constant-face :foreground "blue") - (font-lock-preprocessor-face :foreground "green") - (font-lock-function-name-face :foreground "cyan") - (flyspell-incorrect :foreground "red2") - (flyspell-duplicate :foreground "OrangeRed2") - (hl-line :background "white") - (sh-heredoc :foreground "black" :background "#fff0f0") - (sh-heredoc-face :foreground "black" :background "#fff0f0") - (font-lock-keyword-face :foreground "blue") - (highlight :background "darkseagreen3") - (isearch :background "orange" :foreground "black") - (isearch-lazy-highlight-face' :background "yellow" :foreground "black") - ;; (display-time-mail-face :background "white") - (show-paren-match-face :background "gold" :foreground "black") - (show-paren-mismatch-face :background "red" :foreground "black") - (trailing-whitespace :background "white") - (mode-line :background "cornflowerblue" :foreground "black" :box nil - :inverse-video nil) - (header-line :background "cornflowerblue" :foreground "black" :box nil - :inverse-video nil) - (mode-line-inactive :background "gray60" :foreground "black" :box nil - :inverse-video nil) - (region :background "white" :foreground "black") - (ff/date-info-face :foreground "white" :weight 'bold) - (ff/mail-alarm-face :foreground "red" :weight 'bold) - (selector/selection :background "yellow") - (gui-button-face :background "green" :foreground "white") - (enotes/information-face :foreground "cyan") - - (file-name-shadow :foreground "black") - (shadow :foreground "black") - (warning :foreground "black" :background "red") - )) - ) - -;; (list-colors-display (mapcar 'car color-name-rgb-alist)) - -;; (ff/configure-faces '((default :background "black" :foreground "gray80"))) -;; (ff/configure-faces '((default :background "gray80" :foreground "black"))) - (when window-system - ;; (setq - ;; display-time-use-mail-icon t) (ff/configure-faces '( ;; (escape-glyph :foreground "#c0c0c0" :weight 'bold) - (escape-glyph :foreground "green3" :weight 'bold) (default :background "gray90" :foreground "black") (cperl-array-face :background "gray90" :foreground "blue" :weight 'bold) @@ -520,13 +460,74 @@ load-warning buffer in case of failure." :inverse-video nil) ;; (fringe :background "black" :foreground "gray90") (fringe :background "gray80") - (ff/date-info-face :foreground "white" :weight 'bold) - (ff/mail-alarm-face :foreground "white" :background "red2") + (ff/date-info-face :foreground "white") + (ff/battery-info-face :foreground "black") + (ff/battery-info-alarm-face :foreground "red") + ;; (ff/mail-alarm-face :foreground "white" :background "red2") ;; (alarm-vc-face :foreground "black" :background "yellow" :weight 'normal) (gui-button-face :background "green" :foreground "black") )) ) +(unless window-system + ;; (xterm-mouse-mode 1) + (ff/configure-faces + '((italic :underline nil) + (info-title-2 :foreground "green") + (font-lock-comment-delimiter-face :foreground "green") + (font-lock-comment-face :foreground "green") + (cperl-array-face :background "gray90" :foreground "blue" :weight 'bold) + (cperl-hash-face :background "gray90" :foreground "purple" :weight 'bold) + (diff-added :background "gray90" :foreground "green4" :weight 'bold) + (diff-removed :background "gray90" :foreground "red2" :weight 'bold) + (diff-changed :background "gray90" :foreground "blue" :weight 'bold) + (diff-file-header-face :background "white" :foreground "black" + :weight 'bold) + (diff-header-face :background "white" :foreground "black") + (diff-hunk-header-face :background "white" :foreground "black") + (diff-indicator-removed :foreground "red" :weight 'bold) + (diff-removed :foreground "red" :weight 'bold) + (diff-indicator-added :foreground "blue" :weight 'bold) + (diff-added :foreground "blue" :weight 'bold) + (font-lock-string-face :foreground "green") + (font-lock-variable-name-face :foreground "blue") + (font-lock-constant-face :foreground "blue") + (font-lock-preprocessor-face :foreground "green") + (font-lock-function-name-face :foreground "cyan") + (flyspell-incorrect :foreground "red2") + (flyspell-duplicate :foreground "OrangeRed2") + (hl-line :background "white") + (sh-heredoc :foreground "black" :background "#fff0f0") + (sh-heredoc-face :foreground "black" :background "#fff0f0") + (font-lock-keyword-face :foreground "blue") + (highlight :background "darkseagreen3") + (isearch :background "orange" :foreground "black") + (isearch-lazy-highlight-face' :background "yellow" :foreground "black") + ;; (display-time-mail-face :background "white") + (show-paren-match-face :background "gold" :foreground "black") + (show-paren-mismatch-face :background "red" :foreground "black") + (trailing-whitespace :background "white") + (mode-line :background "cornflowerblue" :foreground "black" :box nil + :inverse-video nil) + (header-line :background "cornflowerblue" :foreground "black" :box nil + :inverse-video nil) + (mode-line-inactive :background "gray60" :foreground "black" :box nil + :inverse-video nil) + (region :background "white" :foreground "black") + (ff/date-info-face :foreground "white" :weight 'bold) + (ff/battery-info-face :foreground "black") + (ff/battery-info-alarm-face :foreground "red") + ;; (ff/mail-alarm-face :foreground "red" :weight 'bold) + (selector/selection :background "yellow") + (gui-button-face :background "green" :foreground "white") + (enotes/information-face :foreground "cyan") + + (file-name-shadow :foreground "black") + (shadow :foreground "black") + (warning :foreground "black" :background "red") + )) + ) + ;; When we are root, put the modeline in red (when (string= (user-real-login-name) "root") @@ -604,17 +605,12 @@ 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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (defun ff/esd-sound (file) -;; "Plays a sound with the Enlighted sound daemon." -;; (interactive) -;; (process-kill-without-query (start-process-shell-command "esdplay" -;; nil -;; "esdplay" file))) - (defun ff/alsa-sound (file) "Plays a sound with ALSA." (interactive) @@ -652,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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -816,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) @@ -854,7 +861,11 @@ printer." (defun ff/sum-values-from-files (list-files prefix) (apply '+ (mapcar - (lambda (f) (string-to-number (ff/file-first-line (format "%s/%s" f prefix)))) + (lambda (f) + (condition-case nil + (string-to-number (ff/file-first-line (format "%s/%s" f prefix))) + (error 0)) + ) list-files))) (defun ff/battery-percent () @@ -864,36 +875,54 @@ printer." (error -1)) ) -(defun ff/temp-and-battery-info-string () (interactive) +(defun ff/temp-info-string () (interactive) (condition-case nil - (concat - - ;; The temperature - - (let ((temp (/ - (apply 'max (mapcar - (lambda (f) (string-to-number (ff/file-first-line f))) - ff/temperature-files)) - 1000))) - - (if (> temp 50) - (let ((s (format "%dC " temp))) - (if (> temp 70) - (propertize s 'face 'font-lock-warning-face) - s) - ) - ) - ) + ;; The temperature + + (let ((temp (/ + (apply 'max (mapcar + (lambda (f) (string-to-number (ff/file-first-line f))) + ff/temperature-files)) + 1000))) + + (if (> temp 50) + (let ((s (format "%dC " temp))) + (if (> temp 70) + (propertize s 'face 'font-lock-warning-face) + s) + ) + ) + ) - ;; The battery + (error nil)) + ) - (pcase (ff/battery-state ff/battery-dirs) - (`charging (format "c%d%%" (ff/battery-percent))) - (`discharging (format "d%d%%" (ff/battery-percent))) - (code "f")) +(defun ff/battery-info-string () (interactive) + (condition-case nil + (pcase (ff/battery-state ff/battery-dirs) + ;; (`charging (format "c%d%%" (ff/battery-percent))) + ;; (`discharging (format "d%d%%" (ff/battery-percent))) + ;; (`unknown "f") + + (`charging + (let ((p (ff/battery-percent))) + (if (> p 10) + (propertize (format "â%d%%" p) 'face 'ff/battery-info-face) + (propertize (format "â%d%%" p) 'face 'ff/battery-info-alarm-face)) + ) + ) - ) + (`discharging + (let ((p (ff/battery-percent))) + (if (> p 10) + (propertize (format "â%d%%" p) 'face 'ff/battery-info-face) + (propertize (format "â%d%%" p) 'face 'ff/battery-info-alarm-face)) + ) + ) + ;; (`unknown "â±") + (`unknown "F") + (_ "?")) (error nil)) ) @@ -901,63 +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 "#c0c0ff")) - (with-temp-buffer (apply 'call-process x) - (buffer-string)) - )) - ) - - '( - ("hostname" nil t nil "-v") - ("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)) - - (fit-window-to-buffer (get-buffer-window buf)) - (use-local-map map) - (set-buffer-modified-p nil) - )) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Make a sound when there is new mail -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; I do not like sounds anymore + (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)) + )) + ) -;; (setq ff/already-boinged-for-mail nil) + '( + ("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") + ))) -;; (defun ff/boing-if-new-mail () -;; (if mail (when (not ff/already-boinged-for-mail) -;; ;; (ff/play-sound-async "~/local/sounds/boing1.wav") -;; ;; (ff/show-unspooled-mails) -;; (setq ff/already-boinged-for-mail t)) -;; (setq ff/already-boinged-for-mail nil)) -;; ) + (goto-char (point-min)) + (while (re-search-forward "^$" nil t) (backward-delete-char 1)) -;; (add-hook 'display-time-hook 'ff/boing-if-new-mail) + (fit-window-to-buffer (get-buffer-window buf)) + (use-local-map map) + (set-buffer-modified-p nil) + ) + ) + ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Display time @@ -965,28 +984,35 @@ printer." (setq - display-time-interval 15 ;; Check every 15s + display-time-interval 10 ;; Check every 10s display-time-string-forms `( - ;; (if mail - ;; (concat " " - ;; (propertize " mail " - ;; 'face 'ff/mail-alarm-face) - ;; " ") - ;; ) + load - ,(if (ff/temp-and-battery-info-string) - '(concat (ff/temp-and-battery-info-string) " ")) + " " - (propertize (concat 24-hours ":" minutes - " " - dayname " " - monthname " " - day) - 'face 'ff/date-info-face) + ,@(when (ff/temp-info-string) + '((ff/temp-info-string))) - load + ,@(when (ff/battery-info-string) + '((ff/battery-info-string))) + + ;; '((propertize + ;; (ff/battery-info-string) + ;; 'face 'ff/battery-info-face))) + + " " + + (propertize + (concat ;;" Ë" + 24-hours ":" minutes + " " + ;; dayname " " + monthname " " day + ;;"Ë" + ) + 'face 'ff/date-info-face) ) @@ -1185,45 +1211,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 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 (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. @@ -1233,47 +1286,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))) @@ -1411,6 +1467,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 @@ -1496,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}} @@ -1694,6 +1787,39 @@ int main(int argc, char **argv) { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defun ff/start-lua () + "Adds all the stuff to start a new lua file" + (interactive) + (goto-char (point-min)) + (insert "#!/usr/bin/env luajit + +require 'torch' +require 'nn' +require 'image' +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." (interactive) @@ -1706,7 +1832,7 @@ int main(int argc, char **argv) {