1

I would like for all my text-based modes (org, markdown, message, mu4e-compose, etc) to use a single abbrev-table, and especially, to add new abbrevs to that shared table whenever I'm in one of those modes.

I know that inheritance between modes is possible, and I think something like this should allow one mode to inherit from another:

(defun endless/ispell-word-then-abbrev (p)
  "Call `ispell-word'. Then create an abbrev for the correction made.
   With prefix P, create local abbrev. Otherwise it will be global."
  (interactive "P")
  (let ((bef (downcase (or (thing-at-point 'word) ""))) aft)
    (call-interactively 'ispell-word)
    (setq aft (downcase (or (thing-at-point 'word) "")))
    (unless (string= aft bef)
      (message "\"%s\" now expands to \"%s\" %sally"
               bef aft (if p "glob" "loc" ))
      (define-abbrev
        (if p global-abbrev-table local-abbrev-table)
         bef aft)))
  (write-abbrev-file))

So I would really prefer to set local-abbrev-table to the same table in all those text modes. Is there a good way to do this?

Drew
  • 75,699
  • 9
  • 109
  • 225
Matt
  • 43
  • 6

1 Answers1

1

Well, I have an answer that seems to be working for me. I just add a hook to abbrev-mode; when it's loaded, it checks to see if it's in a text mode. If so, then it sets the local-abbrev-table to org-mode-abbrev-table. I am doing all of this in the :init phase of the use-package invocation for abbrev-mode. Here's my code, and hopefully it can help someone else out.

(use-package abbrev-mode
  :init
  (setq-default abbrev-mode t)
  ;; a hook funtion that sets the abbrev-table to org-mode-abbrev-table
  ;; whenever the major mode is a text mode
  (defun mwp-set-text-mode-abbrev-table ()
    (if (derived-mode-p 'text-mode)
        (setq local-abbrev-table org-mode-abbrev-table)))
  :commands abbrev-mode
  :hook
  (abbrev-mode . mwp-set-text-mode-abbrev-table)
  :config
  ;; (setq default-abbrev-mode t)
  (setq abbrev-file-name "~/.emacs.d/abbrev_defs")
  (read-abbrev-file "~/.emacs.d/abbrev_defs")
  (setq save-abbrevs 'silently))
Matt
  • 43
  • 6