;; 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
(add-to-list 'load-path "~/sources/gpl/elisp")
(add-to-list 'load-path "~/sources/elisp")
+(add-to-list 'load-path "~/local/elisp")
;; No, I do not like menus
(menu-bar-mode -1)
;; Nor fringes
-(when (functionp 'fringe-mode) (fringe-mode '(0 . 0)))
+;; (when (functionp 'fringe-mode) (fringe-mode '(0 . 0)))
+;; (when (functionp 'fringe-mode) (fringe-mode '(0 . 1)))
+(when (functionp 'fringe-mode) (fringe-mode 10))
;; And I do not like scrollbar neither
(when (functionp 'scroll-bar-mode) (scroll-bar-mode -1))
;; use colorization for all modes
(global-font-lock-mode t)
-(setq font-lock-maximum-decoration 2
+(setq font-lock-maximum-decoration 3
;;'((latex-mode . 2) (t . 2))
)
(setq savehist-file "~/private/emacs/savehist")
(when (functionp 'savehist-mode) (savehist-mode 1))
+;; And allow minibuffer recursion
+(setq enable-recursive-minibuffers t)
+(minibuffer-depth-indicate-mode 1)
+
;; I do not like tooltips
(when (functionp 'tooltip-mode) (tooltip-mode nil))
;; make emacs use the clipboard so that copy/paste works for other
;; x-programs. I have no clue how all that clipboard thing works.
+
;; (setq x-select-enable-clipboard t)
;; (setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+;; (setq x-select-enable-primary t)
+;; (setq x-select-enable-clipboard t)
+;; (global-set-key "\C-y" 'clipboard-yank)
(setq
;; And I like ascii files
epa-armor t
+ ;; tramp-default-method "ssh"
+ tramp-default-method "scp"
+
;; I have no problem with files having their own local variables
enable-local-eval t
mc-use-default-recipients t
;; browse-url-new-window-flag t
+
+ ;; I do not like compilation to automatically split the active window
+ ;; vertically, even when the said window is very wide
+ split-height-threshold 0
+ split-width-threshold nil
+
)
;; The backups
backup-by-copying-when-linked t
)
+(setq tramp-backup-directory-alist backup-directory-alist)
+
+(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)
;; What modes for what file extentions
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
+(require 'org-table)
+
(add-to-list 'auto-mode-alist '("\\.txt\\'" . (lambda()
(text-mode)
(orgtbl-mode)
- (auto-fill-mode)
+ ;; (auto-fill-mode)
(flyspell-mode))))
(add-hook 'c++-mode-hook 'flyspell-prog-mode)
))
;; "tool" bar? Are you kidding?
-(when (boundp 'tool-bar-mode) (tool-bar-mode -1))
+(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")
(ff/configure-faces
'((italic :underline nil)
(info-title-2 :foreground "green")
+ (font-lock-comment-delimiter-face :foreground "black")
+ (font-lock-comment-face :foreground "black")
(cperl-array-face :background "gray90" :foreground "blue" :weight 'bold)
(cperl-hash-face :background "gray90" :foreground "purple" :weight 'bold)
- (diff-added-face :foreground "blue" :weight 'bold)
- (diff-changed-face :foreground "green" :weight 'bold)
- (diff-removed-face :foreground "red" :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")
(font-lock-string-face :foreground "green")
(font-lock-variable-name-face :foreground "blue")
(font-lock-constant-face :foreground "blue")
- (font-lock-function-name-face :foreground "blue")
(font-lock-preprocessor-face :foreground "green")
(font-lock-function-name-face :foreground "cyan")
- (flyspell-incorrect-face :foreground "red2")
- (flyspell-duplicate-face :foreground "OrangeRed2")
- (sh-heredoc :foreground "blue")
- (sh-heredoc-face :foreground "blue")
+ (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")
:inverse-video nil)
(mode-line-inactive :background "gray60" :foreground "black" :box nil
:inverse-video nil)
- (region :background "springgreen2")
+ (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")
))
(ff/configure-faces
'(
- (escape-glyph :foreground "#c0c0c0" :weight 'bold)
+ ;; (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)
(cperl-hash-face :background "gray90" :foreground "purple" :weight 'bold)
(message-cited-text :foreground "red4")
+ (diff-mode :background "gray90" :weight 'bold)
(diff-added :background "gray90" :foreground "green4" :weight 'bold)
(diff-removed :background "gray90" :foreground "red2" :weight 'bold)
- (diff-changed :background "gray90" :foreground "blue")
+ (diff-changed :background "gray90" :foreground "blue" :weight 'bold)
(diff-file-header :background "white" :foreground "black"
:weight 'bold)
(diff-header :background "white" :foreground "black")
(font-lock-builtin-face :foreground "deeppink3")
(font-lock-string-face :foreground "dark olive green")
(font-lock-variable-name-face :foreground "sienna")
- (font-lock-function-name-face :foreground "blue4" :weight 'bold)
+ ;; (font-lock-function-name-face :foreground "blue" :weight 'bold)
+ (font-lock-function-name-face :foreground "blue")
;; (font-lock-comment-delimiter-face :foreground "dark violet")
;; (font-lock-comment-face :foreground "dark violet")
- (flyspell-incorrect-face :foreground "red2")
- (flyspell-duplicate-face :foreground "OrangeRed2")
+ (flyspell-incorrect :background "#ff0000" :foreground "black")
+ (flyspell-duplicate :background "#ff9000" :foreground "black")
+ (hl-line :background "white")
+ (sh-heredoc :foreground "black" :background "#fff0f0")
+ (sh-heredoc-face :foreground "black" :background "#fff0f0")
(header-line :background "gray65")
- (sh-heredoc :foreground "darkorange3")
- (sh-heredoc-face :foreground "darkorange3")
(highlight :background "turquoise")
(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")
(trailing-whitespace :background "gray65")
(cursor :inverse-video t)
(enotes/list-title-face :foreground "blue" :weight 'bold)
- (mode-line :background "#9090f0" :foreground "black" :box nil
+ (mode-line :background "#b0b0ff" :foreground "black" :box nil
:inverse-video nil)
(header-line :background "cornflowerblue" :foreground "black" :box nil
:inverse-video nil)
- (mode-line-inactive :background "#606080" :foreground "black" :box nil
+ (mode-line-inactive :background "gray80" :foreground "black" :box nil
:inverse-video nil)
;; (fringe :background "black" :foreground "gray90")
- (fringe :background "gray65")
- (tex-verbatim :family "courrier")
+ (fringe :background "gray80")
(ff/date-info-face :foreground "white" :weight 'bold)
(ff/mail-alarm-face :foreground "white" :background "red2")
;; (alarm-vc-face :foreground "black" :background "yellow" :weight 'normal)
- ))
+ (gui-button-face :background "green" :foreground "black")
+ ))
)
;; When we are root, put the modeline in red
:inverse-video nil))
))
+;; Why should I have to do this?
+(add-hook 'sh-mode-hook
+ (lambda ()
+ (set-face-attribute 'sh-heredoc nil
+ :foreground "#604000"
+ :background "white"
+ :italic t)
+ (set-face-attribute 'sh-heredoc-face nil
+ :foreground "#604000"
+ :background "white"
+ :italic t)
+ ))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Move the window on the buffer without moving the cursor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Counting various entities in text
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun ff/count-char ()
- "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))))
- (if (and to from) (message "%d character(s)" (- to from 6))
- (error "Can not find the -- delimiters"))))
-
-(defun ff/count-words ()
- "Print number of words 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))))
- (if (and to from)
- (save-excursion
- (goto-char from)
- (let ((count 0))
- (while (< (point) to)
- (re-search-forward "\\w+\\W+")
- (setq count (1+ count)))
- (message "%d word(s)" count)))
- (error "Can not find the -- delimiters"))))
-
(defun ff/word-occurences ()
"Display in a new buffer the list of words sorted by number of
occurrences "
;; Printing
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(require 'ps-print)
+(load "ps-print")
(setq ps-print-color-p nil
- ;; ps-paper-type 'letter
- ps-paper-type 'a4
+ ps-paper-type 'letter
+ ;; ps-paper-type 'a4
;; ps-top-margin (* 1.75 56.692)
;; ps-left-margin 56.692
;; ps-bottom-margin 56.692
;; 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)
+(defun ff/file-first-line (file)
+ (with-temp-buffer
+ (insert-file-contents-literally file)
+ (buffer-substring (point-at-bol) (point-at-eol))))
- (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)))))))
-
- (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 (prefix)
+ (condition-case nil
+ (/ (* 100 (string-to-number (ff/file-first-line (format "%s/%s_now" ff/battery-dir prefix))))
+ (string-to-number (ff/file-first-line (format "%s/%s_full" ff/battery-dir prefix))))
+ (error -1))
+ )
(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
+ ;; The temperature
- (if (> temperature 50)
+ (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 70) (propertize s 'face
+ 'font-lock-warning-face)
s))
- "/"
)
)
+ )
- ;; The battery
+ ;; The battery
+
+ (let ((battery-status (ff/file-first-line (concat ff/battery-dir "/status"))))
(cond
+ ((string= battery-status "Full") "L")
- ((eq (nth 0 info) 'charged) "L")
+ ((string= battery-status "Charging")
+ (format "L%d%%" (max (ff/battery-percent "charge")
+ (ff/battery-percent "energy"))))
- ((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)))
+ ((string= battery-status "Discharging")
+ (let* ((c (max (ff/battery-percent "charge")
+ (ff/battery-percent "energy")))
+ (s (format "B%d%%" c)))
+ (if (>= c 20) s (propertize s 'face 'font-lock-warning-face))))
- ((eq (nth 0 info) 'charging)
- (format "L%2d%%" (/ (* 100 (nth 2 info)) (nth 1 info))))
+ (t battery-status)
- (t (format "???"))
+ ))
- )))
+ )
- (error nil)))
+ (error nil))
+ )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(propertize
(with-temp-buffer (apply 'call-process x)
(buffer-string))
- 'face '(:background "gray80"))
+ 'face '(:background "#c0c0ff"))
(with-temp-buffer (apply 'call-process x)
(buffer-string))
))
load
,(if (ff/laptop-info-string)
- '(concat " /" (ff/laptop-info-string) "/"))
+ '(concat " " (ff/laptop-info-string)))
)
(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")
vc-follow-symlinks t
)
-(when (require 'vc-git nil t)
+(when (load "vc-git" nil t)
(add-to-list 'vc-handled-backends 'GIT))
;; alarm-vc.el is one of my own scripts, check my web page
;; 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)))
+;; (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)))
+
+;; (add-hook 'after-save-hook 'ff/make-shell-scripts-executable)
-(add-hook 'after-save-hook 'ff/make-shell-scripts-executable)
+(add-hook 'after-save-hook
+ 'executable-make-buffer-file-executable-if-script-p)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Cool stuff to navigate in emacs-lisp sources
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(require 'find-func)
+(load "find-func")
(defun ff/goto-function-definition (&optional goback)
"Go directly to the definition of the function at point. With
;; Failsafe version if we can't load bbdb
(defun ff/explicit-name (email) email)
+(load "vc-git")
+
(when (ff/load-or-alert "bbdb")
(setq
"The face to display known mail identities.")
(defface ff/unknown-address-face
- '((t (:foreground "red4")))
+ '((t (:foreground "gray50")))
"The face to display unknown mail identities.")
(defun ff/explicit-name (email)
)
(ff/configure-faces '((ff/robot-address-face :foreground "green4")
- (ff/important-address-face :foreground "blue2"
+ (ff/personal-address-face :foreground "blue2" :weight 'bold)
+ (ff/important-address-face :foreground "red3"
+ ;; :foreground "blue2"
;; :underline t
;; :background "white"
;; :foreground "green4"
;; :slant 'italic
)))
-
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
)
(defface ff/secure-date
- '((t (:background "gold" :weight bold)))
+ '((t (:background "white" :weight bold)))
"The face to display the dates in the modeline.")
(defun ff/secure-note-add () (interactive)
- (find-file "~/private/secure-notes.gpg")
+ (find-file ff/secure-note-file)
;; Adds a new entry (i.e. date and a bunch of empty lines)
(goto-char (point-min))
(insert "-- "
(format-time-string "%Y %b %d %H:%M:%S" (current-time))
- " ------------------------------------------------\n\n")
+ " --\n\n")
(previous-line 1)
;; Colorizes the dates
(save-excursion
(goto-char (point-min))
(while (re-search-forward
- "^-+ [0-9]+ [a-z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+.+$"
+ "^-- [0-9]+ [a-z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ -+$"
nil t)
(add-text-properties
- (match-beginning 0) (match-end 0) '(face ff/secure-date))))
+ (match-beginning 0) (1+ (match-end 0))
+ '(face ff/secure-date rear-nonsticky t))))
(set-buffer-modified-p nil)
(setq buffer-undo-list nil)
(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=2.5cm,right=2.5cm]{geometry}
+\\usepackage[utf8]{inputenc}
\\usepackage{amsmath}
\\usepackage{amssymb}
-\\usepackage[utf8]{inputenc}
-%% \\usepackage{eurosym}
-%% \\usepackage{hyperref}
-%% \\usepackage{harvard}
+\\usepackage[pdftex]{graphicx}
+\\usepackage{microtype}
+\\usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=blue]{hyperref}
\\setlength{\\parindent}{0cm}
\\setlength{\\parskip}{12pt}
+\\renewcommand{\\baselinestretch}{1.3}
+
+\\def\\argmax{\\operatornamewithlimits{argmax}}
+\\def\\argmin{\\operatornamewithlimits{argmin}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 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}
+%% The \\todo command
+\\newcounter{nbdrafts}
+\\setcounter{nbdrafts}{0}
+\\makeatletter
+\\newcommand{\\checknbdrafts}{
+\\ifnum \\thenbdrafts > 0
+\\@latex@warning@no@line{*WARNING* The document contains \\thenbdrafts \\space draft note(s)}
+\\fi}
+\\newcommand{\\todo}[1]{\\addtocounter{nbdrafts}{1}{\\color{red} #1}}
+\\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% \\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)))
))
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<title></title>
+<style>
+p {
+ color:#009900;
+}
+</style>
</head>
<body>
(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)
- ;; (flyspell-mode 1)
- ;; (reftex-mode 1)
+ (copy-face 'default 'tex-verbatim)
+ ;; (ff/configure-faces '((tex-verbatim :background "gray95")))
))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(when (string-match "\\.sh$" filename)
(sh-mode)
- (insert "#!/bin/bash\n\nset -e\n\n")
+ (insert "#!/bin/bash\n\nset -e\nset -o pipefail\n\n")
(save-excursion
(ff/add-copyrights))
)
(add-to-list 'find-file-not-found-functions 'ff/start-file)
(add-to-list 'find-file-not-found-hooks 'ff/start-file))
+(when (>= emacs-major-version 24)
+ (define-obsolete-function-alias 'make-local-hook 'ignore "21.1")
+ (setq send-mail-function 'sendmail-send-it) ;; emacs 24.x stuff
+
+ (custom-set-faces
+ '(diff-added ((default (:background "gray90" :foreground "green4" :weight bold))))
+ '(diff-removed ((default (:background "gray90" :foreground "red2" :weight bold))))
+ '(diff-changed ((default (:background "gray90" :foreground "blue" :weight bold))))
+ )
+ )
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-key global-map [f8] 'ff-find-other-file)
;; (when (ff/load-or-alert "flyspell-timer" t)
;; (add-hook 'flyspell-mode-hook 'flyspell-timer-ensure-idle-timer))
+(defun ff/start-flyspell () (interactive)
+ (ff/configure-faces
+ '(
+ ;; (flyspell-incorrect :background "#ff0000" :foreground "black")
+ ;; (flyspell-duplicate :background "#ff9000" :foreground "black")
+ (flyspell-incorrect :foreground "#ff0000" :weight 'bold)
+ (flyspell-duplicate :foreground "#ff9000" :weight 'bold)
+ ))
+ ;; (flyspell-buffer)
+ )
+
+(add-hook 'flyspell-mode-hook 'ff/start-flyspell)
+
(defun ff/pick-dictionnary () (interactive)
(when (and (boundp 'flyspell-mode) flyspell-mode)
(if (and current-input-method (string-match "latin" current-input-method))
(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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(require 'info nil t)
+(load "info" nil t)
(define-key global-map [(shift iso-lefttab)] 'ispell-complete-word)
;; shift-tab going backward is kind of standard
(setq longlines-show-hard-newlines t
longlines-auto-wrap t
;; longlines-show-effect #("|\n" 0 2 (face escape-glyph))
+ ;; longlines-show-effect #("∴\n" 0 2 (face escape-glyph))
+ longlines-show-effect #("•\n" 0 2 (face escape-glyph))
+ ;; longlines-show-effect #("↵\n" 0 2 (face escape-glyph))
)
;; (defun ff/auto-longlines ()
;; exclusively with my selector.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(require 'recentf)
+(load "recentf")
+
+;; If we just check for file-symlink-p, everytime we start emacs it
+;; will check all the remote files listed in recentf-list, so we check
+;; that they are not remote first
+(defun ff/file-not-remote-but-symlink (filename)
+ (and (not (file-remote-p filename)) (file-symlink-p filename)))
-(setq recentf-exclude
- (append recentf-exclude
- '("enotes$" "secure-notes$" "media-playlists$"
- "bbdb$"
- "svn-commit.tmp$" ".git/COMMIT_EDITMSG$"
- "\.bbl$" "\.aux$" "\.toc$"))
+(setq recentf-exclude (append recentf-exclude
+ '(
+ ff/file-not-remote-but-symlink
+ "enotes$" "secure-notes$" "media-playlists$"
+ "bbdb$"
+ "svn-commit.tmp$" ".git/COMMIT_EDITMSG$"
+ "\.bbl$" "\.aux$" "\.toc$"
+ ))
recentf-max-saved-items 1000
recentf-save-file "~/private/emacs/recentf"
)
(when (boundp 'recentf-keep) (add-to-list 'recentf-keep 'file-remote-p))
-;; Removes the link if we add the file itself (I am fed up with
-;; duplicates because of vc-follow-symlinks)
-
-(defadvice recentf-add-file (before ff/remove-links (filename) activate)
- ;; If we are adding a filename corresponding to the last link we
- ;; have added, remove the latter
- (when (and recentf-list
- (file-symlink-p (car recentf-list))
- (string= filename (file-chase-links filename)))
- (setq recentf-list (cdr recentf-list))
- ))
-
(recentf-mode 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
media/mplayer/args '(
"-framedrop"
"-zoom"
+ "-cache" "512"
"-subfont-osd-scale" "3"
;; "-stop-xscreensaver"
;; "-osdlevel" "3"
)
- media/mplayer/timing-request-period 5.0
+ media/mplayer/timing-request-period 1.0
)
)
;; selector.el is one of my own scripts, check my web page
(when (ff/load-or-alert "selector" t)
- (define-key global-map [(shift return)] 'selector/quick-move-in-buffer)
+ ;; (define-key global-map [(shift return)] 'selector/quick-move-in-buffer)
(define-key global-map [(control x) (control b)] 'selector/switch-buffer)
(defun ff/visit-debpkg-file (&optional regexp)
)
)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; My script to automatically count the number of words and characters
+;; between two markers
+
+(ff/load-or-alert "text-counters.el")
+
+;; Display them in the modeline when in text-mode
+
+(add-hook 'text-mode-hook 'tc/add-text-counters-in-modeline)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; A function to remove temporary alarm windows
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
)
(defun ff/flyspell-mode (arg) (interactive "p")
- (flyspell-mode)
- (when flyspell-mode (flyspell-buffer)))
+ (if flyspell-mode (flyspell-mode -1)
+ (flyspell-mode 1)
+ (flyspell-buffer))
+)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; The fridge!
(kill-region (region-beginning) (region-end))
(with-current-buffer (find-file-noselect "fridge")
(goto-char (point-max))
+ (insert "\n")
+ (insert "######################################################################\n")
(insert "\n"
(format-time-string "%Y %b %d %H:%M:%S" (current-time))
" (from "
)
)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Let's be zen. Remove the modeline and fringes.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(setq ff/zen-original-setting nil)
+
+(defun ff/zen () (interactive)
+ (if ff/zen-original-setting
+ (setq mode-line-format (car ff/zen-original-setting)
+ fringe-mode (cdr ff/zen-original-setting)
+ ff/zen-original-setting nil)
+ (setq ff/zen-original-setting (cons mode-line-format fringe-mode)
+ mode-line-format nil
+ fringe-mode '(0 . 0))
+ (delete-other-windows)
+ )
+ (fringe-mode fringe-mode)
+ (if ff/zen-original-setting
+ (message "Zen mode")
+ (message "Cluttered mode"))
+ )
+
+;; (define-key global-map [(control x) (x)] 'ff/zen)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; My own keymap
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq ff/map (make-sparse-keymap))
(define-key global-map [(control \`)] ff/map)
+
+(unless window-system
+ ;; (define-key global-map [(control @)] ff/map)
+ (define-key global-map [(meta O) \`] ff/map)
+)
+
(define-key esc-map "`" ff/map)
(defun ff/git-status (&optional dir) (interactive)
(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)
(define-key ff/map [(control o)] 'selector/quick-pick-recent)
(define-key ff/map "s" 'selector/quick-move-in-buffer)
(define-key ff/map "S" 'selector/search-sentence)
+(define-key ff/map "t" (lambda () (interactive) (find-file "~/private/TODO.txt")))
(define-key ff/map "h" 'ff/tidy-html)
(define-key ff/map "c" 'ff/count-char)
(define-key ff/map [(control p)] 'ff/print-to-file)
(define-key ff/map [?\C-3] 'ff/twin-horizontal-current-buffer)
(define-key ff/map " " 'delete-trailing-whitespace)
+(define-key ff/map [(control x)] 'ff/zen)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Hacks so that all keys are functionnal in xterm and through ssh.
;; 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)