aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorJoão Távora2015-04-12 13:12:27 +0100
committerJoão Távora2015-04-12 13:29:05 +0100
commit25449e7296fe6e5cd9bca49ae1bc52d1552d5324 (patch)
treee0983372a3998c226b9d7d53d105a02f1600582e /lisp
parent303797134fa05d2e0d156a5bd912f8baab418489 (diff)
downloademacs-25449e7296fe6e5cd9bca49ae1bc52d1552d5324.tar.gz
emacs-25449e7296fe6e5cd9bca49ae1bc52d1552d5324.zip
Summary: Improve sexp-based movement in message-mode
Works by giving citations and smileys a different syntax. This helps modes like `show-paren-mode', `electric-pair-mode', and C-M-* sexp-based movement. * lisp/gnus/message.el (message--syntax-propertize): New function. (message-mode): Set syntax-related vars. (message-smileys): New variable. * test/automated/message-mode-tests.el: New file
Diffstat (limited to 'lisp')
-rw-r--r--lisp/gnus/message.el32
1 files changed, 31 insertions, 1 deletions
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 04145ded107..b1bee65b7fe 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -2961,6 +2961,30 @@ See also `message-forbidden-properties'."
2961 2961
2962(autoload 'ecomplete-setup "ecomplete") ;; for Emacs <23. 2962(autoload 'ecomplete-setup "ecomplete") ;; for Emacs <23.
2963 2963
2964(defvar message-smileys '(":-)" ":)"
2965 ":-(" ":("
2966 ";-)" ";)")
2967 "A list of recognized smiley faces in `message-mode'.")
2968
2969(defun message--syntax-propertize (beg end)
2970 "Syntax-propertize certain message text specially."
2971 (let ((citation-regexp (concat "^" message-cite-prefix-regexp ".*$"))
2972 (smiley-regexp (regexp-opt message-smileys)))
2973 (goto-char beg)
2974 (while (search-forward-regexp citation-regexp
2975 end 'noerror)
2976 (let ((start (match-beginning 0))
2977 (end (match-end 0)))
2978 (add-text-properties start (1+ start)
2979 `(syntax-table ,(string-to-syntax "<")))
2980 (add-text-properties end (min (1+ end) (point-max))
2981 `(syntax-table ,(string-to-syntax ">")))))
2982 (goto-char beg)
2983 (while (search-forward-regexp smiley-regexp
2984 end 'noerror)
2985 (add-text-properties (match-beginning 0) (match-end 0)
2986 `(syntax-table ,(string-to-syntax "."))))))
2987
2964;;;###autoload 2988;;;###autoload
2965(define-derived-mode message-mode text-mode "Message" 2989(define-derived-mode message-mode text-mode "Message"
2966 "Major mode for editing mail and news to be sent. 2990 "Major mode for editing mail and news to be sent.
@@ -3063,7 +3087,13 @@ M-RET `message-newline-and-reformat' (break the line and reformat)."
3063 ;; multibyte is not necessary at all. -- zsh 3087 ;; multibyte is not necessary at all. -- zsh
3064 (mm-enable-multibyte)) 3088 (mm-enable-multibyte))
3065 (set (make-local-variable 'indent-tabs-mode) nil) ;No tabs for indentation. 3089 (set (make-local-variable 'indent-tabs-mode) nil) ;No tabs for indentation.
3066 (mml-mode)) 3090 (mml-mode)
3091 ;; Syntactic fontification. Helps `show-paren-mode',
3092 ;; `electric-pair-mode', and C-M-* navigation by syntactically
3093 ;; excluding citations and other artifacts.
3094 ;;
3095 (setq-local syntax-propertize-function 'message--syntax-propertize)
3096 (setq-local parse-sexp-ignore-comments t))
3067 3097
3068(defun message-setup-fill-variables () 3098(defun message-setup-fill-variables ()
3069 "Setup message fill variables." 3099 "Setup message fill variables."