201812091402 slimeを動かしているとddskkの変換がうまくいかない

slimeemacslisp

slimeの設定はこんな風にした。

 (require 'slime)
 (setq inferior-lisp-program "sbcl")
 (slime-setup '(slime-repl slime-fancy slime-banner slime-company))
 (add-hook 'lisp-mode-hook 'smartparens-mode)
 (add-hook 'lisp-mode-hook
           (lambda ()
             (set (make-local-variable lisp-indent-function)
                  'common-lisp-indent-function)))
 (add-to-list 'auto-mode-alist '("\\.lisp\\'" . lisp-mode))

それで .lispファイルを開くと、漢字変換ができなくなる。 M-x describe-key で スペース押すとこんな結果。

 SPC runs the command slime-autodoc-space (found in
 slime-autodoc-mode-map), which is an interactive compiled Lisp
 function in ‘slime-autodoc.el’.
 
 It is bound to SPC.
 
 (slime-autodoc-space N)
 
 Like ‘slime-space’ but nicer.

ということだったので、

 (define-key slime-autodoc-mode-map " " nil)

を追加。

まだだめで、この状態で M-x describe-key で スペース押すとこんな結果。

 SPC runs the command slime-space (found in slime-mode-indirect-map),
 which is an interactive compiled Lisp function in ‘slime.el’.
 
 It is bound to SPC.
 
 (slime-space N)
 
 Insert a space and print some relevant information (function arglist).
 Designed to be bound to the SPC key.  Prefix argument can be used to insert
 more than one space.

じゃあ、ということで

 (define-key slime-mode-map " " nil)

を追加。

・・・で日本語が打てるようになったが、この2つもddskk利用時以外は使いたい。 とすると日本語変換以外の時は上記の関数を呼びたい。 https://gist.github.com/hiyosi/1325989/cea57a115897ac6c3a2f3d0c4082e380b6b30bf7 この方のやつなどを参考にしてこうしてみた。

 (define-key slime-autodoc-mode-map " " nil) ; 下のadd-hookで上書きされるので不要
 (define-key slime-mode-map " " nil)
 ;; ddskkが変換中は変換を優先する@slime
 (defun slime-space/skk (n)
   (interactive "p")
   (if (and (boundp 'skk-henkan-mode) skk-henkan-mode)
       (skk-insert n)
     (slime-autodoc-space n)))
 
 (add-hook 'slime-autodoc-mode-hook
           (lambda ()
             (define-key slime-autodoc-mode-map " " 'slime-space/skk)))