]> git.eshelyaron.com Git - emacs.git/commitdiff
Add support for italic text in ERC
authorAmin Bandali <bandali@gnu.org>
Wed, 12 Aug 2020 17:33:36 +0000 (13:33 -0400)
committerAmin Bandali <bandali@gnu.org>
Wed, 12 Aug 2020 17:39:07 +0000 (13:39 -0400)
* lisp/erc/erc-goodies.el (erc-italic-face): New face for italic text.
(erc-controls-interpret), (erc-controls-highlight): Add `italicp'.
(erc-controls-remove-regexp),
(erc-controls-highlight-regexp): Handle C-] for italic.
(erc-controls-propertize): Add `italicp' argument and use it to
conditionally propertize text with the new `erc-italic-face'.
* etc/NEWS: Announce italic text support.

etc/NEWS
lisp/erc/erc-goodies.el

index b25e43bb9b01fc2a9737079d9088d3ef24a441ae..2be9743a454c859850601c0de398d1cb8a74e1d8 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -717,6 +717,10 @@ https://www.w3.org/TR/xml/#charsets).  Now it rejects such strings.
 *** The /ignore command will now ask for a timeout to stop ignoring the user.
 Allowed inputs are seconds or ISO8601-like periods like "1h" or "4h30m".
 
+---
+*** ERC now recognizes C-] for italic text.
+Italic text is displayed in the new 'erc-italic-face'.
+
 ** Battery
 
 ---
index 94d5de280c62622feb32039bfc9000568f726582..ff7a77f1265d1d0ed9ad8467392be7b40d30142a 100644 (file)
@@ -232,6 +232,10 @@ The value `erc-interpret-controls-p' must also be t for this to work."
   "ERC bold face."
   :group 'erc-faces)
 
+(defface erc-italic-face '((t :slant italic))
+  "ERC italic face."
+  :group 'erc-faces)
+
 (defface erc-inverse-face
   '((t :foreground "White" :background "Black"))
   "ERC inverse face."
@@ -383,6 +387,7 @@ See `erc-interpret-controls-p' and `erc-interpret-mirc-color' for options."
               (erc-controls-strip s))
              (erc-interpret-controls-p
               (let ((boldp nil)
+                    (italicp nil)
                     (inversep nil)
                     (underlinep nil)
                     (fg nil)
@@ -401,6 +406,8 @@ See `erc-interpret-controls-p' and `erc-interpret-mirc-color' for options."
                            (setq bg bg-color))
                           ((string= control "\C-b")
                            (setq boldp (not boldp)))
+                          ((string= control "\C-]")
+                           (setq italicp (not italicp)))
                           ((string= control "\C-v")
                            (setq inversep (not inversep)))
                           ((string= control "\C-_")
@@ -413,13 +420,14 @@ See `erc-interpret-controls-p' and `erc-interpret-mirc-color' for options."
                              (ding)))
                           ((string= control "\C-o")
                            (setq boldp nil
+                                 italicp nil
                                  inversep nil
                                  underlinep nil
                                  fg nil
                                  bg nil))
                           (t nil))
                     (erc-controls-propertize
-                     start end boldp inversep underlinep fg bg s)))
+                     start end boldp italicp inversep underlinep fg bg s)))
                 s))
              (t s)))))
 
@@ -432,13 +440,13 @@ See `erc-interpret-controls-p' and `erc-interpret-mirc-color' for options."
       s)))
 
 (defvar erc-controls-remove-regexp
-  "\C-b\\|\C-_\\|\C-v\\|\C-g\\|\C-o\\|\C-c[0-9]?[0-9]?\\(,[0-9][0-9]?\\)?"
+  "\C-b\\|\C-]\\|\C-_\\|\C-v\\|\C-g\\|\C-o\\|\C-c[0-9]?[0-9]?\\(,[0-9][0-9]?\\)?"
   "Regular expression which matches control characters to remove.")
 
 (defvar erc-controls-highlight-regexp
-  (concat "\\(\C-b\\|\C-v\\|\C-_\\|\C-g\\|\C-o\\|"
+  (concat "\\(\C-b\\|\C-]\\|\C-v\\|\C-_\\|\C-g\\|\C-o\\|"
           "\C-c\\([0-9][0-9]?\\)?\\(,\\([0-9][0-9]?\\)\\)?\\)"
-          "\\([^\C-b\C-v\C-_\C-c\C-g\C-o\n]*\\)")
+          "\\([^\C-b\C-]\C-v\C-_\C-c\C-g\C-o\n]*\\)")
   "Regular expression which matches control chars and the text to highlight.")
 
 (defun erc-controls-highlight ()
@@ -451,6 +459,7 @@ Also see `erc-interpret-controls-p' and `erc-interpret-mirc-color'."
            (replace-match "")))
         (erc-interpret-controls-p
          (let ((boldp nil)
+               (italicp nil)
                (inversep nil)
                (underlinep nil)
                (fg nil)
@@ -467,6 +476,8 @@ Also see `erc-interpret-controls-p' and `erc-interpret-mirc-color'."
                       (setq bg bg-color))
                      ((string= control "\C-b")
                       (setq boldp (not boldp)))
+                     ((string= control "\C-]")
+                      (setq italicp (not italicp)))
                      ((string= control "\C-v")
                       (setq inversep (not inversep)))
                      ((string= control "\C-_")
@@ -479,16 +490,17 @@ Also see `erc-interpret-controls-p' and `erc-interpret-mirc-color'."
                         (ding)))
                      ((string= control "\C-o")
                       (setq boldp nil
+                            italicp nil
                             inversep nil
                             underlinep nil
                             fg nil
                             bg nil))
                      (t nil))
                (erc-controls-propertize start end
-                                        boldp inversep underlinep fg bg)))))
+                                        boldp italicp inversep underlinep fg bg)))))
         (t nil)))
 
-(defun erc-controls-propertize (from to boldp inversep underlinep fg bg
+(defun erc-controls-propertize (from to boldp italicp inversep underlinep fg bg
                                      &optional str)
   "Prepend properties from IRC control characters between FROM and TO.
 If optional argument STR is provided, apply to STR, otherwise prepend properties
@@ -500,6 +512,9 @@ to a region in the current buffer."
    (append (if boldp
                '(erc-bold-face)
              nil)
+           (if italicp
+               '(erc-italic-face)
+             nil)
            (if inversep
                '(erc-inverse-face)
              nil)