Input-method during isearch

Gordon Gustafson gordon3.14 at gmail.com
Tue Mar 3 02:31:14 CET 2015


> I'm actually getting `Invalid function: evil-without-input-method-hooks` when I try using / in 20150219.53.

! Really? Does this happen when you remove any customizations that
tinker with search? If so that may mean there a breaking change
slipped in.

Which input method are you using? I was the one who added support for
input methods during search, and I'll admit I did most of my testing
with an input method that doesn't produce non-ascii characters
(english-dvorak). Can you provide a simple keystroke sequence in that
input method for a character that doesn't work in search?

 Out of curiosity, does the issue persist if you add this to your init file:

    (evil-select-search-module 'evil-search-module 'evil-search)

There's two 'search modules' in evil, the default is just a dressed up
isearch, and 'evil-search takes more control of the minibuffer.

On 3/2/15, Nikolai Weibull <now at disu.se> wrote:
> On Sun, Mar 1, 2015 at 9:29 PM, Gordon Gustafson <gordon3.14 at gmail.com>
> wrote:
>> Ideally you should search with evil's /, which already uses the
>> current input method, rather than try to hack something together
>> yourself (you can always rebind it to C-s if you feel like that's what
>> you want.
>
> Does it?  I haven't gotten it to work.
>
>> If you still want to build this yourself, look into the
>> macro evil-without-input-method-hooks, which is used in evil-search.el
>> to implement this behavior for evil's search. Long story short, evil
>> has hooks that prevent you from using an input method in normal state,
>> and evil-without-input-method-hooks is probably the best way to get
>> around them.
>
> Evil also advices toggle-input-method.
>
> Anyway, I feel that my solution of faking being in insert state while
> isearch-forward-regexp is being run should solve the issue, but as I
> mentioned, evil-state is re-entering normal state somewhere and I
> can't figure out when/how.  Evil's solution in
> evil-search-incrementally is better, but it doesn't work for me.  I'm
> actually getting
>
> Invalid function: evil-without-input-method-hooks
>
> when I try using / in 20150219.53.  Re-evaluating both it and
> rewriting and then re-evaluating evil-search-incrementally as
>
> (defun evil-search-incrementally (forward regexp-p)
>   "Search incrementally for user-entered text."
>   (let ((evil-search-prompt (evil-search-prompt forward))
>         (isearch-search-fun-function 'evil-isearch-function)
>         (point (point))
>         search-nonincremental-instead)
>     (setq isearch-forward forward)
>     (evil-save-echo-area
>       (evil-without-input-method-hooks
>        (activate-input-method evil-input-method)
>        (if forward
>            (isearch-forward regexp-p)
>          (isearch-backward regexp-p))
>        (evil-push-search-history isearch-string forward)
>        (deactivate-input-method))
>        ...
>
> seems to solve the problem.  Only setting current-input-method isn't
> enough, as isearch-process-search-multibyte-characters checks
> isearch-input-method-function, which is set to whatever
> input-method-function was set to.
>
>> On 3/1/15, Nikolai Weibull <now at disu.se> wrote:
>>> Hi!
>>>
>>> I'm trying to get input-method to work during isearch.  It works if,
>>> for example, isearch-forward-regexp is started in insert mode, as evil
>>> doesn't disable input-method then.  However, when started in normal
>>> mode, it won't work, as evil disables input-method in that state.
>>> I've tried
>>>
>>> (defun now-evil--isearch-forward-regexp-around (fn &rest args)
>>>   (let ((s evil-state))
>>>     (if (or (not evil-local-mode) (evil-state-property s :input-method))
>>>         (apply fn args)
>>>       (evil-change-state 'insert)
>>>       (unwind-protect
>>>           (apply fn args)
>>>         (evil-change-state s)))))
>>> (advice-add 'isearch-forward-regexp :around
>>> 'now-evil--isearch-forward-regexp-around)
>>>
>>> to get around this limitation, but it doesn't work.  It seems that
>>> evil is entering normal state somewhere between here and when isearch
>>> is started.
>>>
>>> What am I doing wrong?
>>>
>>> Thanks!
>>>
>>> _______________________________________________
>>> implementations-list mailing list
>>> implementations-list at lists.ourproject.org
>>> https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
>>>
>>
>> _______________________________________________
>> implementations-list mailing list
>> implementations-list at lists.ourproject.org
>> https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
>
> _______________________________________________
> implementations-list mailing list
> implementations-list at lists.ourproject.org
> https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
>



More information about the implementations-list mailing list