dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

company-ispell.el (2598B)


      1 ;;; company-ispell.el --- company-mode completion backend using Ispell
      2 
      3 ;; Copyright (C) 2009-2011, 2013-2016, 2018, 2021  Free Software Foundation, Inc.
      4 
      5 ;; Author: Nikolaj Schumacher
      6 
      7 ;; This file is part of GNU Emacs.
      8 
      9 ;; GNU Emacs is free software: you can redistribute it and/or modify
     10 ;; it under the terms of the GNU General Public License as published by
     11 ;; the Free Software Foundation, either version 3 of the License, or
     12 ;; (at your option) any later version.
     13 
     14 ;; GNU Emacs is distributed in the hope that it will be useful,
     15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 ;; GNU General Public License for more details.
     18 
     19 ;; You should have received a copy of the GNU General Public License
     20 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
     21 
     22 
     23 ;;; Commentary:
     24 ;;
     25 
     26 ;;; Code:
     27 
     28 (require 'company)
     29 (require 'cl-lib)
     30 (require 'ispell)
     31 
     32 (defgroup company-ispell nil
     33   "Completion backend using Ispell."
     34   :group 'company)
     35 
     36 (defcustom company-ispell-dictionary nil
     37   "Dictionary to use for `company-ispell'.
     38 If nil, use `ispell-complete-word-dict'."
     39   :type '(choice (const :tag "default (nil)" nil)
     40                  (file :tag "dictionary" t)))
     41 
     42 (defvar company-ispell-available 'unknown)
     43 
     44 (defalias 'company-ispell--lookup-words
     45   (if (fboundp 'ispell-lookup-words)
     46       'ispell-lookup-words
     47     'lookup-words))
     48 
     49 (defun company-ispell-available ()
     50   (when (eq company-ispell-available 'unknown)
     51     (condition-case err
     52         (progn
     53           (company-ispell--lookup-words "WHATEVER")
     54           (setq company-ispell-available t))
     55       (error
     56        (message "Company-Ispell: %s" (error-message-string err))
     57        (setq company-ispell-available nil))))
     58   company-ispell-available)
     59 
     60 ;;;###autoload
     61 (defun company-ispell (command &optional arg &rest ignored)
     62   "`company-mode' completion backend using Ispell."
     63   (interactive (list 'interactive))
     64   (cl-case command
     65     (interactive (company-begin-backend 'company-ispell))
     66     (prefix (when (company-ispell-available)
     67               (company-grab-word)))
     68     (candidates
     69      (let ((words (company-ispell--lookup-words
     70                    arg
     71                    (or company-ispell-dictionary ispell-complete-word-dict)))
     72            (completion-ignore-case t))
     73        (if (string= arg "")
     74            ;; Small optimization.
     75            words
     76          ;; Work around issue #284.
     77          (all-completions arg words))))
     78     (kind 'text)
     79     (sorted t)
     80     (ignore-case 'keep-prefix)))
     81 
     82 (provide 'company-ispell)
     83 ;;; company-ispell.el ends here