Update.
authorFrancois Fleuret <francois@fleuret.org>
Wed, 21 Dec 2016 08:38:53 +0000 (09:38 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Wed, 21 Dec 2016 08:38:53 +0000 (09:38 +0100)
emacs.el
vm

index 99c5e54..2271f58 100644 (file)
--- a/emacs.el
+++ b/emacs.el
@@ -970,9 +970,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)))
 
                              " "
 
@@ -1187,41 +1187,45 @@ goback argument, go back where we were."
 ;; The big stuff (bbdb, mailcrypt, etc.)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;; Failsafe version if we can't load bbdb
-(defun ff/explicit-name (email) email)
-
 (load "vc-git")
 
-(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
-   )
-
-  (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
+(setq bbdb-file "~/private/bbdb")
+
+(if (file-exists-p bbdb-file)
+
+    ;; Failsafe version if we can't load bbdb
+    (defun ff/explicit-name (email) email)
+
+  (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
+     )
+
+    (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,35 +1235,36 @@ 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
-                                                   )))
-
   )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1409,6 +1414,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 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
@@ -1780,17 +1820,31 @@ and refilling all the paragraphs."
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defun ff/start-slide ()
-  (interactive)
-  (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+(defun ff/start-slide (universal)
+  (interactive "P")
+
+  (if universal
+      (progn
+        (insert "\\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\\begin{frame}{")
+        (save-excursion (insert "}{}
+
+"))
+        )
+
+    (insert "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \\begin{frame}{")
 
-  (save-excursion (insert "}{}
+    (save-excursion (insert "}{}
 
 \\end{frame}
 
 "))
+    )
   )
 
 (add-hook
@@ -2591,6 +2645,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 "=" 'number-beamer-frames)
 (define-key ff/map [(control shift b)]
   (lambda () (interactive)
     (bookmark-set)
@@ -2773,10 +2828,9 @@ 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
diff --git a/vm b/vm
index 85a9bdc..a4f2b80 100644 (file)
--- a/vm
+++ b/vm
@@ -841,7 +841,9 @@ created."
 (ff/configure-faces
  '(
 
-   (vm-highlight-url :background "white" :foreground "#0000f0" :box nil)
+   ;; (vm-highlight-url :weight 'bold :foreground "#0000f0" :box nil)
+   (vm-highlight-url :underline nil :foreground "#0000f0" :box nil)
+   ;; (vm-highlight-url :background "white" :foreground "#0000f0" :box nil)
    (vm-highlighted-header :box nil) ;; :weight 'bold :background "white")
 
    (vm-attachment-button :background "#f0d0d0" :box nil)