Input-method during isearch
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!
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). 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. On 3/1/15, Nikolai Weibull <[email protected]> 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 [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
On Sun, Mar 1, 2015 at 9:29 PM, Gordon Gustafson <[email protected]> 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 <[email protected]> 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 [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
_______________________________________________ implementations-list mailing list [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
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 <[email protected]> wrote:
On Sun, Mar 1, 2015 at 9:29 PM, Gordon Gustafson <[email protected]> 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 <[email protected]> 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 [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
_______________________________________________ implementations-list mailing list [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
_______________________________________________ implementations-list mailing list [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
On Tue, Mar 3, 2015 at 2:31 AM, Gordon Gustafson <[email protected]> wrote:
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.
Yes.
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?
rfc1345 and swedish-postfix both exhibit this issue.
Out of curiosity, does the issue persist if you add this to your init file:
(evil-select-search-module 'evil-search-module 'evil-search)
This solves the problem, though I still think my solution is the correct one.
participants (2)
-
Gordon Gustafson -
Nikolai Weibull