;; 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
;; 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
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)
(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")
"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"))))
;; 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))
+ )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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)
(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")
;; 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
(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
%% \\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}
(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)
(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)))
))
(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)
))
(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
(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)
;; 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)