Updated for the T420s.
authorFrancois Fleuret <francois@fleuret.org>
Thu, 25 Aug 2011 19:59:21 +0000 (21:59 +0200)
committerFrancois Fleuret <francois@fleuret.org>
Thu, 25 Aug 2011 19:59:21 +0000 (21:59 +0200)
emacs.el

index 7dc64bb..a2278be 100644 (file)
--- a/emacs.el
+++ b/emacs.el
 ;; Contact <francois@fleuret.org> for comments & bug reports             ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;; Ugly hack because 23.2 is not installed properly in my Debian
-
-(when (and (>= emacs-major-version 23)
-           (>= emacs-minor-version 2))
-  (add-to-list 'load-path "/usr/share/emacs/site-lisp/vm/")
-  (add-to-list 'load-path "/usr/share/emacs/site-lisp/bbdb/lisp/")
-  (add-to-list 'load-path "/usr/share/emacs/site-lisp/mailcrypt/")
-  )
-
 ;; It's better to set the preferences in the .Xresources so that the
 ;; window is not first displayed with the wrong options
 
@@ -208,6 +199,8 @@ load-warning buffer in case of failure."
  ;; And I like ascii files
  epa-armor t
 
+ tramp-default-method "ssh"
+
  ;; I have no problem with files having their own local variables
  enable-local-eval t
 
@@ -232,6 +225,15 @@ load-warning buffer in case of failure."
  backup-by-copying-when-linked t
  )
 
+(setq
+ user-emacs-directory "~/misc/emacs.d/")
+
+(setq
+ abbrev-file-name (concat user-emacs-directory "abbrev_defs")
+ server-auth-dir (concat user-emacs-directory "server/")
+ custom-theme-directory user-emacs-directory
+ )
+
 ;; Stop this crazy blinking cursor
 (blink-cursor-mode 0)
 
@@ -448,7 +450,7 @@ load-warning buffer in case of failure."
      (message-cited-text-face :foreground "firebrick")
      (isearch :background "yellow" :foreground "black")
      (isearch-lazy-highlight-face' :background "yellow3" :foreground "black")
-     (region :background "light sky blue" :foreground "black")
+     (region :background "#b8b8e0" :foreground "black")
      ;; (region :background "plum" :foreground "black")
      (show-paren-match-face :background "gold" :foreground "black")
      (show-paren-mismatch-face :background "red" :foreground "black")
@@ -580,8 +582,8 @@ load-warning buffer in case of failure."
   "Prints the number of characters between the first previous \"--\"
 and the firt next \"--\"."
   (interactive)
-  (let ((from (save-excursion (re-search-backward "^--$" nil t)))
-        (to (save-excursion (re-search-forward "^--$" nil t))))
+  (let ((from (save-excursion (re-search-backward "^--$\\|BEGIN_COUNT" nil t)))
+        (to (save-excursion (re-search-forward "^--$\\|END_COUNT" nil t))))
     (if (and to from) (message "%d character(s)" (- to from 6))
       (error "Can not find the -- delimiters"))))
 
@@ -760,103 +762,53 @@ printer."
 ;; Dealing with the laptop battery
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defcustom ff/battery-file "/proc/acpi/battery/BAT0"
+(defcustom ff/battery-dir "/sys/class/power_supply/BAT0"
   "*Where to gather the battery information")
 
-(defcustom ff/thermal-file "/proc/acpi/thermal_zone/THM1/"
+(defcustom ff/temperature-file "/sys/class/thermal/thermal_zone0/temp"
   "*Where to gather the thermal information")
 
-(defun ff/battery-info (path)
-
-  (let ((state nil)
-        (full nil)
-        (charge nil)
-        (rate nil))
-
-    (with-temp-buffer
-      (insert-file-contents-literally (concat path "/state"))
-      (while (re-search-forward "^\\([a-z ]*\\): *\\(.*\\)$" nil t)
-        (let ((field (match-string 1))
-              (value (match-string 2)))
-
-          (cond ((string= field "charging state")
-                 (cond ((string= value "charged") (setq state 'charged))
-                       ((string= value "charging") (setq state 'charging))
-                       ((string= value "discharging")(setq state 'discharging))
-                       (t (setq state 'unknown))))
-
-                ((string= field "remaining capacity")
-                 (setq charge (string-to-number value)))
-
-                ((string= field "present rate")
-                 (setq rate (string-to-number value)))))))
+(defun ff/file-first-line (file)
+  (with-temp-buffer
+    (insert-file-contents-literally file)
+    (buffer-substring (point-at-bol) (point-at-eol))))
 
-    (with-temp-buffer
-      (insert-file-contents-literally (concat path "/info"))
-      (while (re-search-forward "^\\([a-z ]*\\): *\\(.*\\)$" nil t)
-        (let ((field (match-string 1))
-              (value (match-string 2)))
-
-          (cond ((string= field "last full capacity")
-                 (setq full (string-to-number value)))))))
-
-    (list state full charge rate)))
-
-(defun ff/thermal-info (path)
-  (let ((temperature nil))
-    (with-temp-buffer
-      (insert-file-contents-literally (concat path "/temperature"))
-      (while (re-search-forward "^\\([a-z ]*\\): *\\(.*\\)$" nil t)
-        (let ((field (match-string 1))
-              (value (match-string 2)))
-
-          (cond ((string= field "temperature")
-                 (setq temperature (string-to-number value)))))))
-
-    (list temperature)))
+(defun ff/battery-percent ()
+  (/ (* 100 (string-to-number (ff/file-first-line (concat ff/battery-dir "/charge_now"))))
+     (string-to-number (ff/file-first-line (concat ff/battery-dir "/charge_full")))))
 
 (defun ff/laptop-info-string () (interactive)
   (condition-case nil
-      (let ((info (ff/battery-info ff/battery-file))
-            (temperature (car (ff/thermal-info ff/thermal-file))))
-
-        (concat
+      (concat
 
-         ;; The temperature
-
-         (if (> temperature 50)
+       ;; The temperature
+       (let ((temp (/ (string-to-number (ff/file-first-line ff/temperature-file)) 1000)))
+         (if (> temp 50)
              (concat
-              (let ((s (format "%dC" temperature)))
-                (if (> temperature 65) (propertize s 'face
-                                                   'font-lock-warning-face)
+              (let ((s (format "%dC" temp)))
+                (if (> temp 65) (propertize s 'face
+                                            'font-lock-warning-face)
                   s))
-              "/"
               )
            )
+         )
 
-         ;; The battery
-
-         (cond
+       " "
 
-          ((eq (nth 0 info) 'charged) "L")
+       ;; The battery
 
-          ((eq (nth 0 info) 'discharging)
-           (let* ((time (/ (* (nth 2 info) 60) (nth 3 info)))
-                  (s (format "B%d:%02d" (/ time 60) (mod time 60))))
-             (if (< time 15)
-                 ;; Les than 15 minutes, let's write the remaining
-                 ;; time in red
-                 (propertize s 'face 'font-lock-warning-face)
-               s)))
+       (let ((battery-status (ff/file-first-line (concat ff/battery-dir "/status"))))
 
-          ((eq (nth 0 info) 'charging)
-           (format "L%2d%%" (/ (* 100 (nth 2 info)) (nth 1 info))))
+         (cond
+          ((string= battery-status "Full") "L")
+          ((string= battery-status "Charging") (format "L%d%%" (ff/battery-percent)))
+          ((string= battery-status "Discharging") (format "B%d%%"  (ff/battery-percent)))
+          (t "?")))
 
-          (t (format "???"))
+       )
 
-          )))
-
-    (error nil)))
+    (error nil))
+  )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
@@ -991,6 +943,11 @@ printer."
 
 (load "term")
 
+(defun ff/kill-associated-buffer (process str) (interactive)
+  (let ((buffer (process-buffer process)))
+    (kill-buffer buffer))
+  (message "Process finished (%s)" (replace-regexp-in-string "\n$" "" str)))
+
 (defun ff/kill-associated-buffer-and-delete-windows (process str) (interactive)
   (let ((buffer (process-buffer process)))
     (delete-windows-on buffer)
@@ -1037,9 +994,12 @@ In line mode: M-p previous line, M-n next line.")
     (let ((process (get-buffer-process (current-buffer))))
       (process-kill-without-query process)
       (set-process-sentinel process
-                            'ff/kill-associated-buffer-and-delete-windows))
+                            ;; 'ff/kill-associated-buffer-and-delete-windows
+                            'ff/kill-associated-buffer
+                            ))
 
-    (switch-to-buffer-other-window (concat "*" bn "*"))
+    ;; (switch-to-buffer-other-window (concat "*" bn "*"))
+    (switch-to-buffer (concat "*" bn "*"))
     ))
 
 (defcustom ff/default-bash-commands '("ssh")
@@ -1087,17 +1047,17 @@ of commands in `ff/default-bash-commands' is used for auto-completion"
 ;; Please consider the security-related consequences of using it
 
 ;; (defun ff/make-shell-scripts-executable (&optional filename)
-  ;; (setq filename (or filename (buffer-name)))
-  ;; (when (and (string-match "\\.sh$\\|\\.pl$\\|\\.rb" filename)
-             ;; (not (file-executable-p filename))
-             ;; )
-    ;; (set-file-modes filename 493)
-    ;; (message "Made %s executable" filename)))
+;; (setq filename (or filename (buffer-name)))
+;; (when (and (string-match "\\.sh$\\|\\.pl$\\|\\.rb" filename)
+;; (not (file-executable-p filename))
+;; )
+;; (set-file-modes filename 493)
+;; (message "Made %s executable" filename)))
 
 ;; (add-hook 'after-save-hook 'ff/make-shell-scripts-executable)
 
 (add-hook 'after-save-hook
-      'executable-make-buffer-file-executable-if-script-p)
+          'executable-make-buffer-file-executable-if-script-p)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Cool stuff to navigate in emacs-lisp sources
@@ -1431,17 +1391,21 @@ universal argument starts xfig even if the .fig does not exist"
   (insert "%% -*- mode: latex; mode: reftex; mode: flyspell; coding: utf-8; tex-command: \"pdflatex.sh\" -*-
 
 \\documentclass[12pt]{article}
-\\usepackage{epsfig}
-\\usepackage{a4}
+\\usepackage[a4paper,top=2.5cm,bottom=2cm,left=1.5cm,right=1.5cm]{geometry}
+\\usepackage[utf8]{inputenc}
 \\usepackage{amsmath}
 \\usepackage{amssymb}
-\\usepackage[utf8]{inputenc}
+\\usepackage{hyperref}
+
+%% \\usepackage[pdftex]{graphicx}
 %% \\usepackage{eurosym}
-%% \\usepackage{hyperref}
-%% \\usepackage{harvard}
 
-\\setlength{\\parindent}{0cm}
-\\setlength{\\parskip}{12pt}
+\\hypersetup{
+  colorlinks=true,
+  linkcolor=blue,
+  urlcolor=blue,
+  citecolor=blue
+}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Sans serif fonts
@@ -1451,17 +1415,13 @@ universal argument starts xfig even if the .fig does not exist"
 %% \\renewcommand{\\ttdefault}{pcr}
 %% \\renewcommand*\\familydefault{\\sfdefault}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Draft layout
-%% \\setlength{\\parindent}{1cm}
-%% \\renewcommand{\\baselinestretch}{2.0}
-%% \\setlength{\\oddsidemargin}{-0.6cm}
-%% \\setlength{\\evensidemargin}{0cm}
-%% \\setlength{\\textwidth}{17.5cm}
-%% \\setlength{\\textheight}{23cm}
-%% \\setlength{\\topmargin}{-1.5cm}
+%% \\def\\argmax{\\operatornamewithlimits{argmax}}
+%% \\def\\argmin{\\operatornamewithlimits{argmin}}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+%% \\setlength{\\parindent}{0cm}
+%% \\setlength{\\parskip}{12pt}
 %% \\renewcommand{\\baselinestretch}{1.3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \\begin{document}
 
@@ -1479,25 +1439,12 @@ universal argument starts xfig even if the .fig does not exist"
 (defun ff/add-copyrights ()
   "Adds two lines for the (C) at the beginning of current buffer."
   (interactive)
-  (let ((comment-style 'plain)
-        (gpl
-         (concat
-
-          "\nSTART_IP_HEADER\n"
 
-          (when (boundp 'user-full-name)
-            (concat "\nWritten by " user-full-name "\n"))
-
-          (when (boundp 'user-mail-address)
-            (concat "Contact <" user-mail-address "> for comments & bug reports\n"))
-
-          "\nEND_IP_HEADER\n"
-
-          )))
+  (let ((comment-style 'plain))
 
     (goto-char (point-min))
 
-    ;; If this is a script, put the gpl after the first line
+    ;; If this is a script, put the copyrights after the first line
 
     (when (re-search-forward "^#!" nil t)
       (beginning-of-line)
@@ -1505,7 +1452,20 @@ universal argument starts xfig even if the .fig does not exist"
 
     (let ((start (point))
           (comment-style 'box))
-      (insert gpl)
+      (insert
+       (concat
+
+        "\nSTART_IP_HEADER\n"
+
+        (when (boundp 'user-full-name)
+          (concat "\nWritten by " user-full-name "\n"))
+
+        (when (boundp 'user-mail-address)
+          (concat "Contact <" user-mail-address "> for comments & bug reports\n"))
+
+        "\nEND_IP_HEADER\n"
+        ))
+
       (comment-region start (point)))
 
     ))
@@ -1720,6 +1680,19 @@ and refilling all the paragraphs."
    (define-key latex-mode-map [(control c) (control a)] 'align-current)
    (define-key latex-mode-map [(control end)] 'tex-close-latex-block)
    (define-key latex-mode-map [(control tab)] 'ispell-complete-word)
+   ;; Strange that I have to specify that
+   ;; (setq paragraph-separate "[%     \f]*$")
+   ;; (setq paragraph-separate
+         ;; (concat "[%]*\\|[\f%]\\|[ \t]*\\($\\|"
+                 ;; "\\\\[][]\\|"
+                 ;; "\\\\" (regexp-opt (append
+                                     ;; (mapcar 'car latex-section-alist)
+                                     ;; '("begin" "label" "end" )) t)
+                 ;; "\\>\\|\\\\\\(" (regexp-opt '("item" "bibitem" "newline"
+                                               ;; "noindent" "newpage" "footnote"
+                                               ;; "marginpar" "parbox" "caption"))
+                 ;; "\\|\\$\\$\\|[a-z]*\\(space\\|skip\\|page[a-z]*\\)"
+                 ;; "\\>\\)[ \t]*\\($\\|%\\)\\)"))
    ;; (flyspell-mode 1)
    ;; (reftex-mode 1)
    ))
@@ -2030,7 +2003,7 @@ This may be a useful alternative binding for \\[delete-other-windows]
       (while (re-search-forward "[0-9\.]+" nil t)
         (let ((value (string-to-number (buffer-substring (match-beginning 0) (match-end 0)))))
           (delete-region (match-beginning 0) (match-end 0))
-          (insert (format "%0.0f" value)))))))
+          (insert (format "%0.2f" value)))))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Keymaping
@@ -2448,10 +2421,15 @@ with a time tag, and save this file"
       (git-status (file-name-directory (buffer-file-name)))
     (error "No file attached to this buffer")))
 
+(defun ff/insert-date () (interactive)
+  (insert (format-time-string "\n * %Y %b %d %H:%M:%S\n\n" (current-time)))
+  )
+
 (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" 'diary)
+(define-key ff/map "d" 'ff/insert-date)
 (define-key ff/map [(control \`)] 'ff/bash-new-buffer)
 (define-key ff/map [(control n)] 'enotes/show-all-notes)
 (define-key ff/map [(control s)] 'ff/secure-note-add)
@@ -2503,30 +2481,30 @@ with a time tag, and save this file"
   ;; so that it works in xterm (yes), let's use xclip. This is a bit
   ;; ugly.
 
-  (defun ff/yank-with-xclip (&optional arg)
-    "Paste the content of the X clipboard with the xclip
-command. Without ARG converts some of the '\\uxxxx' characters."
-    (interactive "P")
-    (with-temp-buffer
-      (shell-command "xclip -o" t)
-      (unless arg
-        (mapc (lambda (x) (replace-string (concat "\\u" (car x)) (cdr x) nil (point-min) (point-max)))
-              '(("fffd" . "??")
-                ("2013" . "-")
-                ("2014" . "--")
-                ("2018" . "`")
-                ("2019" . "'")
-                ("201c" . "``")
-                ("201d" . "''")
-                ("2022" . "*")
-                ("2026" . "...")
-                ("20ac" . "EUR")
-                )))
-      (kill-ring-save (point-min) (point-max)))
-
-    (yank))
-
-  (define-key global-map [(meta y)] 'ff/yank-with-xclip)
+  ;; (defun ff/yank-with-xclip (&optional arg)
+    ;; "Paste the content of the X clipboard with the xclip
+;; command. Without ARG converts some of the '\\uxxxx' characters."
+    ;; (interactive "P")
+    ;; (with-temp-buffer
+      ;; (shell-command "xclip -o" t)
+      ;; (unless arg
+        ;; (mapc (lambda (x) (replace-string (concat "\\u" (car x)) (cdr x) nil (point-min) (point-max)))
+              ;; '(("fffd" . "??")
+                ;; ("2013" . "-")
+                ;; ("2014" . "--")
+                ;; ("2018" . "`")
+                ;; ("2019" . "'")
+                ;; ("201c" . "``")
+                ;; ("201d" . "''")
+                ;; ("2022" . "*")
+                ;; ("2026" . "...")
+                ;; ("20ac" . "EUR")
+                ;; )))
+      ;; (kill-ring-save (point-min) (point-max)))
+
+    ;; (yank))
+
+  ;; (define-key global-map [(meta y)] 'ff/yank-with-xclip)
 
   ;;   (set-terminal-coding-system 'iso-latin-1)
   ;; (set-terminal-coding-system 'utf-8)