Giter Site home page Giter Site logo

Comments (111)

lyokha avatar lyokha commented on May 24, 2024

Так оно и есть. Проверьте.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Не работает, если:

  • два таба, в которых два разных буфера;
  • оба буфера в инсерт моде;
  • в одном буфере EN раскладка, в другом RU;
  • при переключении табов не выходя из инсерта раскладка не меняется;

On Thu, Apr 18, 2013 at 11:55 PM, lyokha [email protected] wrote:

Так оно и есть. Проверьте.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16609365
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Поправил, проверьте пожалуйста. Теперь раскладка должна переключаться при любых изменениях текущего окна или таба (в т.ч. в консольном vim). Спасибо за идею!

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024
  1. Раньше было так: если в normal mode переключился на RU, потом включил
    insert mode и потом опять вышел в normal - раскладка автоматически менялась
    на EN, вне зависимости от того, какая до этого была в normal. Сейчас, если
    в normal переключил на RU, то она запоминается для этого режима и
    включается при переходе в него. Это неудобно, раньше было логичнее, в
    нормале RU не нужна.
  2. Есть баг. Открываем два файла в табах. В первом файле включаем инсерт и
    меняем раскладку на РУ, не выходя из инсерта переключаем таб на второй
    файл, там тоже РУ, хотя для него РУ не ставилась, должна быть ЕН. И для
    второго файла РУ и в нормале и в инсерте выставляется.
  3. В остальном вроде работает, еще потестирую.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024
  1. Эта фича появилась после фикса issue #6. - Что если исходная раскладка была us(dvp), а после переключения оказалась us? Это плохо. К тому же, новое поведение мне наоборот кажется более логичным - если вы включили русскую раскладку в нормальном режиме, то значит для чего-то это было вам нужно. Почему плагин должен самовольно менять ее на us? В принципе можно ввести какую-нибудь новую переменную, типа let g:XkbSwitchNLayout = 'us' и, если она определена в .vimrc, то всегда в нормальном режиме переключаться на эту раскладку. Могу добавить.
  2. Это не баг. Дело в том, что настройки XkbSwitch загружаются в буфер только после того, как вы вошли в режим Инсерт, Реплэйс и т.п. Вы открыли второй буфер и вошли в нем в режим Инсерт, в первом буфере при этом XkbSwitch еще не загружен. Но как только вы смените раскладку в первом буфере раскладки станут независимы и табы запомнят свои раскладки. Кстати мне такое поведение кажется тоже более логичным - плагин не должен думать за вас, он должен учиться вслед за вашими действиями.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024
  1. Лучше сделать эту фичу конфигурируемой. Обычно РУ включается в нормале
    для того, чтобы, например, ввести текст в строку поиска. Это используется
    реже, чем, остальные команды на инглише. Большинство инпута в нормале идет
    на инглише, и практически весь инпут начинается с комманд на английском.
    Ну, или сделать, чтобы запоминало только варианты EN раскладки для нормала
    и переключалась в них.
  2. Для пользователя это нелогично. Я не выставлял для конкретного буфера РУ
    раскладку, почему она наследуется от другого буфера. Хотя тут не понятно,
    какую раскладку считать дефолтной. Можно также добавить переменную вроде
    default_layout = 'EN', тогда все новые буфера в инсерте использую эту
    раскладу, если для них не была запомнена определена через конфиг.
    переменную, если не определена - оставить функционал, как сейчас.

2013/4/19 lyokha [email protected]

Эта фича появилась после фикса issue #6#6.

  • Что если исходная раскладка была us(dvp), а после переключения оказалась
    us? Это плохо. К тому же, новое поведение мне наоборот кажется более
    логичным - если вы включили русскую раскладку в нормальном режиме, то
    значит для чего-то это было вам нужно. Почему плагин должен самовольно
    менять ее на us? В принципе можно ввести какую-нибудь новую переменную,
    типа let g:XkbSwitchNLayout = 'us' и, если она определена в .vimrc, то
    всегда в нормальном режиме переключаться на эту раскладку. Могу добавить.
    2.

    Это не баг. Дело в том, что настройки XkbSwitch загружаются в буфер
    только после того, как вы вошли в режим Инсерт, Реплэйс и т.п. Вы открыли
    второй буфер и вошли в нем в режим Инсерт, в первом буфере при этом
    XkbSwitch еще не загружен. Но как только вы смените раскладку в первом
    буфере раскладки станут независимы и табы запомнят свои раскладки.
    Кстати мне такое поведение кажется тоже более логичным - плагин не должен
    думать за вас, он должен учиться вслед за вашими действиями.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16649434
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Попробуйте сейчас, в .vimrc нужно добавить

let g:XkbSwitchNLayout = 'us'
let g:XkbSwitchILayout = 'us'

(может у вас дефолтная не us - вставьте вашу дефолтную). Первая строка фиксит возвращение в Normal mode, вторая - исходную раскладку для Insert mode.
Если все ок, я закрою баг.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

2013/4/19 lyokha [email protected]

let g:XkbSwitchNLayout = 'us'
let g:XkbSwitchILayout = 'us'

БАГ

open1 -> insert -> RU -> open2 -> insert -> switch_to_1 -> insert = EN,
ERROR, должно быть RU
open1 -> insert -> RU -> open2 -> switch_to_1 -> insert = EN, ERROR, должно
быть RU

open1 -> insert -> RU -> NORMAL -> open2 -> insert -> switch_to_1 -> insert
= RU, OK
open1 -> insert -> RU -> NORMAL -> open2 -> switch_to_1 -> insert = RU, OK

В общем, если после изменения раскладки в первом файле не переключаясь в
normal открыть второй и вернуться в первый, то для инсерта в первом файле
раскладка не запоминается и не восстанавливается. Где-то у тебя в коде с
логикой проблема.

Больше проблем не нет.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Похоже на то, что раскладка инсерт режима запоминается только при выходе из
него. Надо запоминать в момент изменения.

2013/4/19 lyokha [email protected]

Попробуйте сейчас, в .vimrc нужно добавить

let g:XkbSwitchNLayout = 'us'
let g:XkbSwitchILayout = 'us'

(может у вас дефолтная не us - вставьте вашу дефолтную). Первая строка
фиксит возвращение в Normal mode, вторая - исходную раскладку для Insert
mode.
Если все ок, я закрою баг.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16654472
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Хм, а у меня все правильно работает. Раскладка запоминается при покидании буфера тоже. Используете gvim?

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

дело в том, что когда открываешь первый файл меняешь раскладку в инсерте и
не выходя из инсерта открываешь второй - вим автоматически выходит в
нормал, и наверное не срабатывает событие, раскладка для инсерта первого не
запоминается.

2013/4/19 lyokha [email protected]

Хм, а у меня все правильно работает. Раскладка запоминается при покидании
буфера тоже. Используете gvim?


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16657749
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Как переключаете табы? Я из меню наверху, у меня этот тест проходит. В консольном вим если мышкой щелкать в другое окно - тоже все хорошо

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Метод переключения табов не играет роли. Работает все нормально и когда
хоткеями переключаешь и когда кликами.
Единственная проблема - это, то что я описал. Когда вим открывает файл в
новом табе, переклюачется на него и автоматом выходит в нормал. Тогда
раскладка для инсерта не сохраняется в старом табе.
Если в старом табе хотябы раз переключиться из инсерта в нормал - все
работает как надо. Если только зайти в инсерт, сменить раскладку и не
выходя в нормал открыть новый файл в новом табе - раскладка теряется.

2013/4/19 lyokha [email protected]

Как переключаете табы? Я из меню наверху, у меня этот тест проходит. В
консольном вим если мышкой щелкать в другое окно - тоже все хорошо


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16658238
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

В том то и прикол, что у меня обе описанные вами процедуры прекрасно работают - раскладка восстанавливается, если буфер был оставлен в инсерт режиме. Правда, только сейчас понял, что у меня есть важное отличие по сравнению c описанной вами схемы - при открытии нового буфера в новом табе у меня он переходит в режим Инсерт, если текущий буфер находится в режиме Инсерт.

Мой gvim:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 12 2012 14:43:48)
Заплатки: 1-415, 417-712
С изменениями, внесёнными <[email protected]>
Скомпилирован  <[email protected]>
Огромная версия с графическим интерфейсом GTK2.  Включённые (+) и отключённые (-) особенности:
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent 
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff 
+digraphs +dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi 
+file_in_path +find_in_path +float +folding -footer +fork() +gettext 
-hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall 
+linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname 
+mouse +mouseshape +mouse_dec +mouse_gpm -mouse_jsbterm +mouse_netterm 
+mouse_sgr -mouse_sysmouse +mouse_urxvt +mouse_xterm +multi_byte +multi_lang 
-mzscheme +netbeans_intg +path_extra +perl +persistent_undo +postscript 
+printer +profile +python/dyn -python3 +quickfix +reltime +rightleft +ruby/dyn 
+scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop 
+syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse
 +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual 
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup 
+X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save 
            общесистемный файл vimrc: "/etc/vimrc"
         пользовательский файл vimrc: "$HOME/.vimrc"
          пользовательский файл exrc: "$HOME/.exrc"
           общесистемный файл gvimrc: "/etc/gvimrc"
        пользовательский файл gvimrc: "$HOME/.gvimrc"
             общесистемный файл меню: "
$VIMRUNTIME/menu.vim"
          значение $VIM по умолчанию: "/etc"
   значение $VIMRUNTIME по умолчанию: "/usr/share/vim/vim73
"
Параметры компиляции: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/include/libdrm -I/usr/include/harfbuzz   -I/usr/local/include  -O2 -g -pipe -Wall  -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1      
Сборка: gcc   -L. -Wl,-z,relro -rdynamic -Wl,-export-dynamic  -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE  -Wl,-z,relro  -L/usr/local/lib -Wl,--as-needed -o vim   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0   -lSM -lICE -lXpm -lXt -lX11 -lSM -lICE -lm -lnsl  -lselinux  -lncurses -lacl -lattr -lgpm -ldl    -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE  -fstack-protector  -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

В общем дело как раз в этом.
При открытии новой вкладки событие BufLeave не срабатывает, и xkb_save
не вызывается. После этого вим сам переходит в нормал и раскладка для
инсерта первого таба теряется.

Вообще, логичнее чтобы раскладка запоминалась при ее изменении а не при
выходе из буфера. Это решило бы все проблемы.
Смотри сам на счет этого фикса.

У нас у всех при открытии нового таба / буфера переходит в нормал. Это тоже
ожидаемое поведение.

От autocmd BufLeave * call xkb_save() можно отказаться.
Вызов call xkb_save() перенести туда, где раскладка переключилась.

2013/4/19 lyokha [email protected]

В том то и прикол, что у меня обе описанные вами процедуры прекрасно
работают - раскладка восстанавливается, если буфер был оставлен в инсерт
режиме. Правда, только сейчас понял, что у меня есть важное отличие по
сравнению c описанной вами схемы - при открытии нового буфера в новом табе
у меня он переходит в режим Инсерт, если текущий буфер находится в режиме
Инсерт.

Мой gvim:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 12 2012 14:43:48)
Заплатки: 1-415, 417-712
С изменениями, внесёнными [email protected]
Скомпилирован [email protected]
Огромная версия с графическим интерфейсом GTK2. Включённые (+) и отключённые (-) особенности:
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
+conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff
+digraphs +dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi
+file_in_path +find_in_path +float +folding -footer +fork() +gettext
-hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall
+linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname
+mouse +mouseshape +mouse_dec +mouse_gpm -mouse_jsbterm +mouse_netterm
+mouse_sgr -mouse_sysmouse +mouse_urxvt +mouse_xterm +multi_byte +multi_lang
-mzscheme +netbeans_intg +path_extra +perl +persistent_undo +postscript
+printer +profile +python/dyn -python3 +quickfix +reltime +rightleft +ruby/dyn
+scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop
+syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse
+textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup
+X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save
общесистемный файл vimrc: "/etc/vimrc"
пользовательский файл vimrc: "$HOME/.vimrc"
пользовательский файл exrc: "$HOME/.exrc"
общесистемный файл gvimrc: "/etc/gvimrc"
пользовательский файл gvimrc: "$HOME/.gvimrc"
общесистемный файл меню: "
$VIMRUNTIME/menu.vim"
значение $VIM по умолчанию: "/etc"
значение $VIMRUNTIME по умолчанию: "/usr/share/vim/vim73
"
Параметры компиляции: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/include/libdrm -I/usr/include/harfbuzz -I/usr/local/include -O2 -g -pipe -Wall -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Сборка: gcc -L. -Wl,-z,relro -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -Wl,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0 -lSM -lICE -lXpm -lXt -lX11 -lSM -lICE -lm -lnsl -lselinux -lncurses -lacl -lattr -lgpm -ldl -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -fstack-protector -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16659711
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Наверное можно и так, сделаю - напишу

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Нет, нельзя скорее всего. Как я буду ловить событие изменения раскладки? Не уверен, что вим это может.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Вим это точно не может.
А, я понял.
Тебе нужен еще TabLeave event.

2013/4/19 lyokha [email protected]

Нет, нельзя скорее всего. Как я буду ловить событие изменения раскладки?
Не уверен, что вим это может.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16660974
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Я не уверен, что TabLeave здесь адекватен - все наши настройки связаны c буфером, а покидание таба к буферу не приязано. Только что собрал последний снапшот vim c меркуриала - работает так же, как и мой стандартный, т.е. новое окно включается в режиме ввода и при переходе в старое раскладки переключаются правильно. Не понятно, почему у тебя не так, может вим старый? Может дело в настройках, но вряд ли для конфигурации такого поведения есть настройки.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

вим последний
проверю сейас

2013/4/19 lyokha [email protected]

Я не уверен, что TabLeave здесь адекватен - все наши настройки связаны c
буфером, а покидание таба к буферу не приязано. Только что собрал последний
снапшот vim c меркуриала - работает так же, как и мой стандартный, т.е.
новое окно включается в режиме ввода и при переходе в старое раскладки
переключаются правильно. Не понятно, почему у тебя не так, может вим
старый? Может дело в настройках, но вряд ли для конфигурации такого
поведения есть настройки.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16661559
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

ты что-то заливал? есть что тестить?

2013/4/19 lyokha [email protected]

Я не уверен, что TabLeave здесь адекватен - все наши настройки связаны c
буфером, а покидание таба к буферу не приязано. Только что собрал последний
снапшот vim c меркуриала - работает так же, как и мой стандартный, т.е.
новое окно включается в режиме ввода и при переходе в старое раскладки
переключаются правильно. Не понятно, почему у тебя не так, может вим
старый? Может дело в настройках, но вряд ли для конфигурации такого
поведения есть настройки.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16661559
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

В последний час - ничего, я в дороге был.
19.04.2013 21:03 пользователь "zdm" [email protected] написал:

ты что-то заливал? есть что тестить?

2013/4/19 lyokha [email protected]

Я не уверен, что TabLeave здесь адекватен - все наши настройки связаны c
буфером, а покидание таба к буферу не приязано. Только что собрал
последний
снапшот vim c меркуриала - работает так же, как и мой стандартный, т.е.
новое окно включается в режиме ввода и при переходе в старое раскладки
переключаются правильно. Не понятно, почему у тебя не так, может вим
старый? Может дело в настройках, но вряд ли для конфигурации такого
поведения есть настройки.

Reply to this email directly or view it on GitHub<
https://github.com/lyokha/vim-xkbswitch/issues/7#issuecomment-16661559>
.

Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16665081
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

вот рабочий код

2013/4/19 lyokha [email protected]

В последний час - ничего, я в дороге был.
19.04.2013 21:03 пользователь "zdm" [email protected] написал:

ты что-то заливал? есть что тестить?

2013/4/19 lyokha [email protected]

Я не уверен, что TabLeave здесь адекватен - все наши настройки связаны
c
буфером, а покидание таба к буферу не приязано. Только что собрал
последний
снапшот vim c меркуриала - работает так же, как и мой стандартный,
т.е.
новое окно включается в режиме ввода и при переходе в старое раскладки
переключаются правильно. Не понятно, почему у тебя не так, может вим
старый? Может дело в настройках, но вряд ли для конфигурации такого
поведения есть настройки.

Reply to this email directly or view it on GitHub<
https://github.com/lyokha/vim-xkbswitch/issues/7#issuecomment-16661559>
.

Reply to this email directly or view it on GitHub<
https://github.com/lyokha/vim-xkbswitch/issues/7#issuecomment-16665081>
.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16665219
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Залил на vim.org. Я надеюсь ты с github изменения проверял, а не с vim.org? Что за рабочий код, не понял.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

с гитхаб
исправлен баг о котором мы говорили сегодня

2013/4/19 lyokha [email protected]

Залил на vim.org. Я надеюсь ты с github изменения проверял, а не с vim.org?
Что за рабочий код, не понял.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16678316
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

В общем работает все? ты просто не обновился тогда что-ли?

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

или исправлен в виме?

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

внес изменения в твой код, чтобы сохранялась раскладка для инсерта если
открывается новый таб
посмотри изменения - все станет ясно, там 5 строк

On Fri, Apr 19, 2013 at 10:29 PM, lyokha [email protected] wrote:

или исправлен в виме?


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16678824
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Дык, смотреть то где? Ты же никакой ссылки не дал.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

там вложенный файл в письме был))

On Fri, Apr 19, 2013 at 10:36 PM, lyokha [email protected] wrote:

Дык, смотреть то где? Ты же никакой ссылки не дал.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16679580
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

не там вложенного файла, ты изменения покажи

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

--- a/plugin/xkbswitch.vim
+++ b/plugin/xkbswitch.vim
@@ -12,6 +12,7 @@ if exists('g:loaded_XkbSwitch') && g:loaded_XkbSwitch
endif

let g:loaded_XkbSwitch = 1
+let s:last_insert_enter_bufnr = 0

if !exists('g:XkbSwitchLib')
if has('unix')
@@ -272,7 +273,7 @@ fun! xkb_switch(mode,...)
endif
endfun

-fun! xkb_save()
+fun! xkb_save(...)
for ft in g:XkbSwitchSkipFt
if ft == &ft
return
@@ -285,13 +286,18 @@ fun! xkb_save()
return
endif
let cur_layout = libcall(g:XkbSwitch['backend'], g:XkbSwitch['get'],
'')

  • if mode() =~ '^[iR]'
  •    let b:xkb_ilayout = cur_layout
    
  • else
  •    if g:XkbSwitchNLayout == ''
    
  •        let b:xkb_nlayout = cur_layout
    
  •    endif
    
  • endif
  • if exists("a:1")
  •    call setbufvar(a:1, 'xkb_ilayout', cur_layout)
    
  • else
  •   if mode() =~ '^[iR]'
    
  •           let b:xkb_ilayout = cur_layout
    
  •       else
    
  •       if g:XkbSwitchNLayout == ''
    
  •               let b:xkb_nlayout = cur_layout
    
  •           endif
    
  •   endif
    
  • endif
    endfun

fun! enable_xkb_switch(force)
@@ -301,7 +307,7 @@ fun! enable_xkb_switch(force)
if filereadable(g:XkbSwitch['backend']) == 1
augroup XkbSwitch
au!

  •        autocmd InsertEnter \* call <SID>xkb_switch(1)
    
  •        autocmd InsertEnter \* let s:last_insert_enter_bufnr =
    
    bufnr('%') | call xkb_switch(1)
    for item in g:XkbSwitchPostIEnterAuto
    exe "autocmd InsertEnter ".item[0]['pat']."
    ".item[0]['cmd'].
    \ " | if ".item[1].
    @@ -310,14 +316,14 @@ fun! enable_xkb_switch(force)
    autocmd InsertLeave * call xkb_switch(0)
    " BEWARE: Select modes are not supported well when navigating
    " between windows or tabs due to vim restrictions
  •        autocmd BufEnter \* call <SID>xkb_switch(mode() =~ '^[iR]', 2)
    
  •        autocmd BufLeave \* call <SID>xkb_save()
    
  •        autocmd BufEnter \* let s:last_insert_enter_bufnr = 0 | call
    
    xkb_switch(mode() =~ '^[iR]', 2)
  •        autocmd BufLeave \* let s:last_insert_enter_bufnr = 0 | call
    
    xkb_save()
  •        autocmd TabLeave \* if s:last_insert_enter_bufnr != 0 | call
    
    xkb_save(s:last_insert_enter_bufnr) | endif
    augroup END
    endif
    let g:XkbSwitchEnabled = 1
    endfun

On Fri, Apr 19, 2013 at 10:39 PM, lyokha [email protected] wrote:

не там вложенного файла, ты изменения покажи


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16679980
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

блин, форматирование съехало, щас гляну в чем изменения

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Пояснение

  1. BufLeave не вызывается, когда открывается файл в новом табе. Это
    особенность вима.
  2. Когда входим в инсерт - сохраняем номер данного буфера в спец. переменной
  3. по событию BufLeave - обнуляем эту переменную, по событию TabLeave -
    проверяем ее значение, если не 0 - значит произошло переключение табов, но
    BufLeave не был вызван, тогда для буфера, номер которого в переменной
    принудительно сохраняем раскладку insert.

On Fri, Apr 19, 2013 at 10:43 PM, zdm [email protected] wrote:

--- a/plugin/xkbswitch.vim
+++ b/plugin/xkbswitch.vim
@@ -12,6 +12,7 @@ if exists('g:loaded_XkbSwitch') && g:loaded_XkbSwitch
endif

let g:loaded_XkbSwitch = 1
+let s:last_insert_enter_bufnr = 0

if !exists('g:XkbSwitchLib')
if has('unix')
@@ -272,7 +273,7 @@ fun! xkb_switch(mode,...)
endif
endfun

-fun! xkb_save()
+fun! xkb_save(...)
for ft in g:XkbSwitchSkipFt
if ft == &ft
return
@@ -285,13 +286,18 @@ fun! xkb_save()
return
endif
let cur_layout = libcall(g:XkbSwitch['backend'], g:XkbSwitch['get'],
'')

  • if mode() =~ '^[iR]'
  •    let b:xkb_ilayout = cur_layout
    
  • else
  •    if g:XkbSwitchNLayout == ''
    
  •        let b:xkb_nlayout = cur_layout
    
  •    endif
    
  • endif
  • if exists("a:1")
  •    call setbufvar(a:1, 'xkb_ilayout', cur_layout)
    
  • else
  •   if mode() =~ '^[iR]'
    
  •           let b:xkb_ilayout = cur_layout
    
  •       else
    
  •       if g:XkbSwitchNLayout == ''
    
  •               let b:xkb_nlayout = cur_layout
    
  •           endif
    
  •   endif
    
  • endif
    endfun

fun! enable_xkb_switch(force)
@@ -301,7 +307,7 @@ fun! enable_xkb_switch(force)
if filereadable(g:XkbSwitch['backend']) == 1
augroup XkbSwitch
au!

  •        autocmd InsertEnter \* call <SID>xkb_switch(1)
    
  •        autocmd InsertEnter \* let s:last_insert_enter_bufnr =
    
    bufnr('%') | call xkb_switch(1)
    for item in g:XkbSwitchPostIEnterAuto
    exe "autocmd InsertEnter ".item[0]['pat']."
    ".item[0]['cmd'].
    \ " | if ".item[1].
    @@ -310,14 +316,14 @@ fun! enable_xkb_switch(force)
    autocmd InsertLeave * call xkb_switch(0)
    " BEWARE: Select modes are not supported well when navigating
    " between windows or tabs due to vim restrictions
  •        autocmd BufEnter \* call <SID>xkb_switch(mode() =~ '^[iR]', 2)
    
  •        autocmd BufLeave \* call <SID>xkb_save()
    
  •        autocmd BufEnter \* let s:last_insert_enter_bufnr = 0 | call
    
    xkb_switch(mode() =~ '^[iR]', 2)
  •        autocmd BufLeave \* let s:last_insert_enter_bufnr = 0 | call
    
    xkb_save()
  •        autocmd TabLeave \* if s:last_insert_enter_bufnr != 0 | call
    
    xkb_save(s:last_insert_enter_bufnr) | endif
    augroup END
    endif
    let g:XkbSwitchEnabled = 1
    endfun

On Fri, Apr 19, 2013 at 10:39 PM, lyokha [email protected] wrote:

не там вложенного файла, ты изменения покажи


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16679980
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

А, ты с гитхаба пишешь, я а с почты, поэтому ты моих почтовых аттачей не
видишь

Pull request делать лень.
http://www.sendspace.com/file/a7aq42 - выложил сюда

On Fri, Apr 19, 2013 at 10:48 PM, lyokha [email protected] wrote:

блин, форматирование съехало, щас гляну в чем изменения


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16681042
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

ок, я сейчас твой код смотрю, кстати, может имеет смысл тогда уж заменить TabLeave на WinLeave? Перед TabLeave всегда WinLeave вызывается - и более общий тогда случай будет. Только одного понять я не могу - почему у меня работает, а у тебя нет.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

http://www.sendspace.com/file/a7aq42 - выложил сюда

не знаю, но BufLeave точно не вызывается при откоытии нового таба. Протестил и на юниксе и на винде. Как у тебя может работать - не представляю.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

щас проверю у себя - если будет работать правильно, то закоммичу

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

а у меня это наоборот не работает (( Буду уже завтра смотреть, как с этим бороться. Еще было бы интересно узнать, как это у других пользователь проявляется.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

У меня вызывается BufLeave при открытии нового таба в режиме ввода: я добавил трейс

autocmd BufLeave * echoerr "LEAVE"

открыл файл в gvim, перешел в режим ввода, изменил язык на русский, кликнул меню Файл - выбрал Open tab - в попап-меню выбрал файл - открылся новый файл, внизу показалось сообщение LEAVE на красном фоне. Может ты как-то по-другому его открываешь? Причем в консольном виме тоже все прекрасно работает.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

я открываю ерез коммандную строку
gvim.exe -p --remote-tab-silent

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

так открывается через total comander например

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024
/*
 * Prepare for leaving the current tab page.
 * When autocomands change "curtab" we don't leave the tab page and return
 * FAIL.
 * Careful: When OK is returned need to get a new tab page very very soon!
 */
    static int
leave_tabpage(new_curbuf)
    buf_T   *new_curbuf UNUSED;    /* what is going to be the new curbuf,
                       NULL if unknown */
{
    tabpage_T   *tp = curtab;

#ifdef FEAT_VISUAL
    reset_VIsual_and_resel();   /* stop Visual mode */
#endif
#ifdef FEAT_AUTOCMD
    if (new_curbuf != curbuf)
    {
    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
    if (curtab != tp)
        return FAIL;
    }
    apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
    if (curtab != tp)
    return FAIL;
    apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
    if (curtab != tp)
    return FAIL;
#endif
#if defined(FEAT_GUI)
    /* Remove the scrollbars.  They may be added back later. */
    if (gui.in_use)
    gui_remove_scrollbars();
#endif
    tp->tp_curwin = curwin;
    tp->tp_prevwin = prevwin;
    tp->tp_firstwin = firstwin;
    tp->tp_lastwin = lastwin;
    tp->tp_old_Rows = Rows;
    tp->tp_old_Columns = Columns;
    firstwin = NULL;
    lastwin = NULL;
    return OK;
}

это кусок кода из vim (текущего): в функции leave_tabpage() есть вызов apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf)

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

попробуй gvim.exe -p --remote-tab-silent FILENAME
я все отключил, vimrc, плагины, оставил только трасировку, подобную твоей
BufLeave не вызывается

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Так тоже работает без проблем. Меня смущает .exe в твоем gvim )) Ты на винде? Я то на ней проверить не могу

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

сейчас на винде

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

а в linux пробовал?

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

при открытии таба твоим методом - все как ты писал, и мой фикс не работает
при открытии моим - все наоборот
надо доделать и заканчивать с этим

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

строка 290 в моем исходнике, заменить на:
if exists("a:1") && a:1 != bufnr('%')
все, проверяй

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

луше так, заменить TabLeave autocmd:

autocmd TabLeave * if s:last_insert_enter_bufnr != 0 && s:last_insert_enter_bufnr != bufnr('%') | call xkb_save(s:last_insert_enter_bufnr) | endif

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

у меня оба способа работают правильно - с вызовом BufLeave, щас проверю твое изменение. Но все таки было бы неплохо проверить последний vim для винды и линукс

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

я на вмнде, вим самы последний, проверил оба способа
если открывать таб через меню - bufleave работает, в нормал не переходит сам из инсерта
если открывать таб gvim.exe -p --remote-tab-silent - bufleave не работает, всегда переходит в нормал

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

на линуксе сейчас протестить не могу, есть только консоль - это не то

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

с моим последним фиксом должно работать везде, там все варианты учтены

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

ок, у меня работает, сейчас немного подрехтую и выложу

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

ну слава аллаху

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

попробуй сейчас - я немного переделал - добавил возможность отключать TabLeave - c помощью let g:XkbSwitchFixNoBufLeave = 0 (по умолчанию фикс включен), если все ок, то я закрываю баг ))

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

только этого и не хватало для достижения гармонии
работает, закрывай

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

ок, гут ))

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Мне удалось воспроизвести проблему с изменением раскладки в режиме Ввода если вим открывает еще один файл из другой программы (ЭТО ВАЖНО!), например из терминала с помощью gvim --remote-tab-silent file2. Оказывается, проблема не в BufLeave и InsertLeave - они вызываются, проблема в том, что при выходе из режима Ввода в первом табе раскладка клавиатуры соответствует раскладке окна, из которого был запущен вим! На моем десктопе раскладка следует за окнами, при этом xkb-switch показывает раскладку глобально, отсюда проблема. Видимо в Винде что-то похожее.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

не совсем так.
например я запускаю вим из тоталкоммандера по f4. раскладка тотала - en,
раскладка вима - ru, запоминается ру
вроде все работает нормально

2013/4/20 lyokha [email protected]

Мне удалось воспроизвести проблему с изменением раскладки в режиме Ввода
если вим открывает еще один файл из другой программы (ЭТО ВАЖНО!), например
из терминала с помощью gvim --remote-tab-silent file2. Оказывается,
проблема не в BufLeave и InsertLeave - они вызываются, проблема в том, что
при выходе из режима Ввода в первом табе раскладка клавиатуры соответствует
раскладке окна, из которого был запущен вим! На моем десктопе раскладка
следует за окнами, при этом xkb-switch показывает раскладку глобально,
отсюда проблема. Видимо в Винде что-то похожее.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16708786
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

bufleave действительно не выполняется

2013/4/20 zdm [email protected]

не совсем так.
например я запускаю вим из тоталкоммандера по f4. раскладка тотала - en,
раскладка вима - ru, запоминается ру
вроде все работает нормально

2013/4/20 lyokha [email protected]

Мне удалось воспроизвести проблему с изменением раскладки в режиме Ввода
если вим открывает еще один файл из другой программы (ЭТО ВАЖНО!), например
из терминала с помощью gvim --remote-tab-silent file2. Оказывается,
проблема не в BufLeave и InsertLeave - они вызываются, проблема в том, что
при выходе из режима Ввода в первом табе раскладка клавиатуры соответствует
раскладке окна, из которого был запущен вим! На моем десктопе раскладка
следует за окнами, при этом xkb-switch показывает раскладку глобально,
отсюда проблема. Видимо в Винде что-то похожее.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16708786
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

просто я понял, что ты вчера запускал и второй файл из внешней программы, я второй файл запускал уже из вима. Твой кейс у меня в линукс не работает с текущей версией. У меня раскладка меняется от окна к окну и это вносит дополнительные проблемы, xkb-switch смотрит раскладку глобально

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

да, все запускал из вне.
по линуксом сейчас проверить не могу.

2013/4/20 lyokha [email protected]

просто я понял, что ты вчера запускал и второй файл из внешней программы,
я второй файл запускал уже из вима. Твой кейс у меня в линукс не работает с
текущей версией. У меня раскладка меняется от окна к окну и это вносит
дополнительные проблемы, xkb-switch смотрит раскладку глобально


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16709131
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

вообще все должно работать, ведь в момент вызова библиотеки окно вима
является активным, значит для него и вернется раскладка.

2013/4/20 zdm [email protected]

да, все запускал из вне.
по линуксом сейчас проверить не могу.

2013/4/20 lyokha [email protected]

просто я понял, что ты вчера запускал и второй файл из внешней программы,
я второй файл запускал уже из вима. Твой кейс у меня в линукс не работает с
текущей версией. У меня раскладка меняется от окна к окну и это вносит
дополнительные проблемы, xkb-switch смотрит раскладку глобально


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16709131
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Я немного переделал. Дело в том, что у меня текущий фикс не работает. У меня специфичная настройка переключения раскладки и фокусов окон (обе следуют за курсором - такое можно сделать в Linux десктопах). В новом фиксе только для gvim и только когда он скомпилирован c опцией +clientserver раскладка регулярно запоминается в режиме ввода в моменты простоя (используется autocommand CursorHoldI) и только если gvim имеет фокус (это как раз из-за плавающей фокусировки и раскладки). Моменты простоя определяются updatetime (по умолчанию 1 сек.). У тебя тоже должно работать, но есть тонкость при тестировании - если войти в режим ввода, переключить раскладку и тут же открыть новый файл - работать не будет, так как не сработает CursorHoldI. Нужно что-то поделать в буфере - что-то ввести или просто перевести курсор - тогда все будет работать. (Случай, когда пользователь просто переключает раскладку и больше ничего не делает мне кажется неправдоподобным, а потому на него можно забить).

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

потестирую - отпишу

2013/4/22 lyokha [email protected]

Я немного переделал. Дело в том, что у меня текущий фикс не работает. У
меня специфичная настройка переключения раскладки и фокусов окон (обе
следуют за курсором - такое можно сделать в Linux десктопах). В новом фиксе
только для gvim и только когда он скомпилирован c опцией +clientserver
раскладка регулярно запоминается в режиме ввода в моменты простоя
(используется autocommand CursorHoldI) и только если gvim имеет фокус (это
как раз из-за плавающей фокусировки и раскладки). Моменты простоя
определяются updatetime (по умолчанию 1 сек.). У тебя тоже должно работать,
но есть тонкость при тестировании - если войти в режим ввода, переключить
раскладку и тут же открыть новый файл - работать не будет, так как не
сработает CursorHoldI. Нужно что-то поделать в буфере - что-то ввести или
просто перевести курсор - тогда все будет работать. (Случай, когда
пользователь просто переключает раскладку и больше ничего не делает мне
кажется неправдоподобным, а потому на него можно забить).


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16758764
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

да, все поломалось. буду разбираться.

2013/4/22 zdm [email protected]

потестирую - отпишу

2013/4/22 lyokha [email protected]

Я немного переделал. Дело в том, что у меня текущий фикс не работает. У
меня специфичная настройка переключения раскладки и фокусов окон (обе
следуют за курсором - такое можно сделать в Linux десктопах). В новом фиксе
только для gvim и только когда он скомпилирован c опцией +clientserver
раскладка регулярно запоминается в режиме ввода в моменты простоя
(используется autocommand CursorHoldI) и только если gvim имеет фокус (это
как раз из-за плавающей фокусировки и раскладки). Моменты простоя
определяются updatetime (по умолчанию 1 сек.). У тебя тоже должно работать,
но есть тонкость при тестировании - если войти в режим ввода, переключить
раскладку и тут же открыть новый файл - работать не будет, так как не
сработает CursorHoldI. Нужно что-то поделать в буфере - что-то ввести или
просто перевести курсор - тогда все будет работать. (Случай, когда
пользователь просто переключает раскладку и больше ничего не делает мне
кажется неправдоподобным, а потому на него можно забить).


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16758764
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Проверь прежде всего, что CursorHoldI срабатывает - вставь туда echoerr

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

срабатывает

On Mon, Apr 22, 2013 at 11:41 AM, lyokha [email protected] wrote:

Проверь прежде всего, что CursorHoldI срабатывает - вставь туда echoerr


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16766948
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

тогда он должен сохранять b:xkb_ilayout ... А сейчас, одну простую штуку переделаю, забыл ...

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

проверь сейчас

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024
  1. сейчас если новый файл открываешь всегда для него дублируется предидущая
    раскладка, не зависимо от let g:XkbSwitchNLayout = 'US' или let
    g:XkbSwitchILayout = 'US';
  2. думаю TabLeave надо вернуть в каком-то виде, сохранение по холду курсора
  3. это хорошо, но не всегда срабатывает;

On Mon, Apr 22, 2013 at 11:49 AM, lyokha [email protected] wrote:

проверь сейчас


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16768386
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

а он у тебя сразу в Insert режиме открывается что-ли?

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Вообще там уже много накрутилось всего. Надо выписать всю логику с
описанием отдельно и зависимость от конфигурационных параметров, а потом
реализовать заново, по коду видно, что бессистемно баг закрывается, так еще
больше запутаешься, одно фиксишь - другое отваливается. Мне в коде мало то
понятно, при вызовах используются флаги 1, 0 - за что они отвечают не ясно.

2013/4/22 zdm [email protected]

  1. сейчас если новый файл открываешь всегда для него дублируется
    предидущая раскладка, не зависимо от let g:XkbSwitchNLayout = 'US' или let
    g:XkbSwitchILayout = 'US';
  2. думаю TabLeave надо вернуть в каком-то виде, сохранение по холду
    курсора - это хорошо, но не всегда срабатывает;

On Mon, Apr 22, 2013 at 11:49 AM, lyokha [email protected] wrote:

проверь сейчас


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16768386
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

вот например:
autocmd BufEnter * call xkb_switch(mode() =~ '^[iR]', 2)

и тут же в коде xkb_switch:
let imode = mode() =~ '^[iR]'

зачем это дублирование?

в общем, надо выписать логику, она уже должна быть понятна окончательно,
вроде ты за эти дни все кейсы тестил.
Потом функции xkb_save и enable_xkb_switch написать заново и все будет
гарно)

2013/4/22 zdm [email protected]

Вообще там уже много накрутилось всего. Надо выписать всю логику с
описанием отдельно и зависимость от конфигурационных параметров, а потом
реализовать заново, по коду видно, что бессистемно баг закрывается, так еще
больше запутаешься, одно фиксишь - другое отваливается. Мне в коде мало то
понятно, при вызовах используются флаги 1, 0 - за что они отвечают не ясно.

2013/4/22 zdm [email protected]

  1. сейчас если новый файл открываешь всегда для него дублируется
    предидущая раскладка, не зависимо от let g:XkbSwitchNLayout = 'US' или let
    g:XkbSwitchILayout = 'US';
  2. думаю TabLeave надо вернуть в каком-то виде, сохранение по холду
    курсора - это хорошо, но не всегда срабатывает;

On Mon, Apr 22, 2013 at 11:49 AM, lyokha [email protected]:

проверь сейчас


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16768386
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

let imode - в другой функции xkb_save() - туда mode не передается. Так у тебя файлы сразу в режиме Insert открываются?

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

нет, файлы всгда в нормале открываются, мы ж это тестили 3 дня назад.
у меня, при запуске вима из внешней программы, файлы всегда в нормале, если
был в инсерте - переходит сам в нормал. Событие BufLeave не срабатывает.
если открывать новый таб через меню - тогда вим не меняет текущий режим
(insert / normal), BufLeave срабатывает.

Надо все это выписать, положить перед глазами и за 5 минут разобраться,
какие события как обрабатывать.
Ты тестируешь под иксами на линуксе? опиши, как оно там работает.
Для винды я тебе написал выше.

2013/4/22 lyokha [email protected]

let imode - в другой функции xkb_save() - туда mode не передается. Так у
тебя файлы сразу в режиме Insert открываются?


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16773862
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

А ты последнее изменение взял с let s:XkbSwitchFocused = 1? Если да, то непонятно, почему let g:XkbSwitchILayout = 'US' не срабатывает.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Ок, постараюсь описать, для нашей конкретной проблемы есть две важных функции: xkb_switch() и xkb_save(). Параметры xkb_switch(): mode и безымянный флаг, mode означает - это режим ввода (i, R а также 3 режима Select), флаг - если равен 1, то это значит, что переключение находится в режиме ожидания (pending) - это нужно для обеспечения Select режимов и к нашей проблеме не относится, если он равен 2 - то раскладки предыдущего режима запоминаться не будут - это используется только в автокоманде BufEnter для того, чтобы не затереть настройки g:XkbSwitchILayout текущим значением раскладки.
Функция xkb_save() вызывается из BufLeave и CursorHoldI для сохранения раскладки. У нее единственный параметр - безымянный флаг - если он присутствует, то функция должна сразу же вернуться, если окно gvim не сфокусировано - это сделано для того, чтобы не запоминать неверную раскладку, если она следует за мышью.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

В моем случае TabLeave не имеет смысла, так как будет вызван из окна c другой раскладкой - и в b:xkb_ilayout сохранится неправильное значение, я не понимаю как у тебя это работает, может виндовая библиотека возвращает раскладку для конкретного окна? - тогда здесь должно быть все ок. Версия xkb-switch для UNIX возвращает текущую глобальную раскладку

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

блин, так и есть, и это может быть источником проблем

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

в винде раскладки для окон разделяются.

On Mon, Apr 22, 2013 at 3:51 PM, lyokha [email protected] wrote:

блин, так и есть, и это может быть источником проблем


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16783740
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

да, сейчас добавлю стратегию в s:XkbSwitchDict и верну настройки для винды, у меня в Linux все работает сейчас идеально

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

Все, внес обратно твои изменения (TabLeave и т.д.) путем разделения стратегий свитчера на глобальную и локальную (per Window) - теперь должно заработать у тебя так как было, у меня тоже все ок. Мог накосячить при переносе, но вроде все ок.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

смотрю

2013/4/22 lyokha [email protected]

Все, внес обратно твои изменения (TabLeave и т.д.) путем разделения
стратегий свитчера на глобальную и локальную (per Window) - теперь должно
заработать у тебя так как было, у меня тоже все ок. Мог накосячить при
переносе, но вроде все ок.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16786321
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

не срабатывает, смотрю код

2013/4/22 zdm [email protected]

смотрю

2013/4/22 lyokha [email protected]

Все, внес обратно твои изменения (TabLeave и т.д.) путем разделения
стратегий свитчера на глобальную и локальную (per Window) - теперь должно
заработать у тебя так как было, у меня тоже все ок. Мог накосячить при
переносе, но вроде все ок.


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16786321
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

вроде нет косяков, проверил

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

есть тот-же баг, с которым раньше возились под виндой, когда при открытии
нового файла раскладка для инсерта не сохранялась

On Mon, Apr 22, 2013 at 5:07 PM, lyokha [email protected] wrote:

вроде нет косяков, проверил


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16789033
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

ща исправлю, отвлекают

2013/4/22 zdm [email protected]

есть тот-же баг, с которым раньше возились под виндой, когда при открытии
нового файла раскладка для инсерта не сохранялась

On Mon, Apr 22, 2013 at 5:07 PM, lyokha [email protected] wrote:

вроде нет косяков, проверил


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16789033
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

Когда вызывается xkb_save из TabLeave, до строки 314:

if s:XkbSwitchSaveILayout && a:0 && g:XkbSwitch['local']
call setbufvar(a:1, 'xkb_ilayout', cur_layout)

не доходит, из - за того, что выходит по условию в строке 310:

if !exists('b:xkb_mappings_loaded')
    return
endif

2013/4/22 zdm [email protected]

ща исправлю, отвлекают

2013/4/22 zdm [email protected]

есть тот-же баг, с которым раньше возились под виндой, когда при открытии
нового файла раскладка для инсерта не сохранялась

On Mon, Apr 22, 2013 at 5:07 PM, lyokha [email protected] wrote:

вроде нет косяков, проверил


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16789033
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

тут ты сам должен поправить

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

ок, значит оно и раньше не работало

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

в том то и дело, что раньше работало, сейчас до сохранений раскладки по
TabLeave не доходит, раньше доходило и сохраняло.

On Mon, Apr 22, 2013 at 6:09 PM, lyokha [email protected] wrote:

ок, значит оно и раньше не работало


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16793534
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

странно, во-первых эта строка здесь уже давно, во-вторых InsertEnter запускает xkb_switch(1), который вызывает xkb_mappings_load(), который устанавливает переменную b:xkb_mappings_loaded

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

т.е. Если ты входил в режим ввода (а это должно было произойти), то эта переменная уже установлена, и это условие (return) не сработает

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

что делает эта строка?
exe "autocmd InsertEnter " . item[0]['pat'] . " " . item[0]['cmd'] . " | if
" . item[1] . " | let b:xkb_ilayout_managed = 1 | endif"

2013/4/22 lyokha [email protected]

т.е. Если ты входил в режим ввода (а это должно было произойти), то эта
переменная уже установлена, и это условие (return) не сработает


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16794664
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

массив g:XkbSwitchPostIEnterAuto всегда пустой, значит эти autocmd не
устанавливаются

2013/4/22 zdm [email protected]

что делает эта строка?
exe "autocmd InsertEnter " . item[0]['pat'] . " " . item[0]['cmd'] . " |
if " . item[1] . " | let b:xkb_ilayout_managed = 1 | endif"

2013/4/22 lyokha [email protected]

т.е. Если ты входил в режим ввода (а это должно было произойти), то эта
переменная уже установлена, и это условие (return) не сработает


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16794664
.

from vim-xkbswitch.

zdm avatar zdm commented on May 24, 2024

if !exists('g:XkbSwitchPostIEnterAuto')
let g:XkbSwitchPostIEnterAuto = []
endif

2013/4/22 zdm [email protected]

массив g:XkbSwitchPostIEnterAuto всегда пустой, значит эти autocmd не
устанавливаются

2013/4/22 zdm [email protected]

что делает эта строка?
exe "autocmd InsertEnter " . item[0]['pat'] . " " . item[0]['cmd'] . " |
if " . item[1] . " | let b:xkb_ilayout_managed = 1 | endif"

2013/4/22 lyokha [email protected]

т.е. Если ты входил в режим ввода (а это должно было произойти), то эта
переменная уже установлена, и это условие (return) не сработает


Reply to this email directly or view it on GitHubhttps://github.com//issues/7#issuecomment-16794664
.

from vim-xkbswitch.

lyokha avatar lyokha commented on May 24, 2024

это описано в доке - для реализации кастомных правил переключения внутри режима ввода - она не должна мешать

from vim-xkbswitch.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.