IME-композиция: клавиша Enter отправляет сообщение вместо подтверждения ввода

При использовании китайской раскладки ввода (IME) для ввода английских символов возникает ошибка (например, при вводе слов без отключения IME). Обычно нажатие клавиши Enter означает «не выбирать ни одного кандидата и напрямую ввести содержимое буфера». Однако в чат-интерфейсе это интерпретируется как «отправить сообщение», что приводит к данной ошибке.

Ожидаемое поведение:

  • Пользователь вводит английские буквы с помощью китайской IME (например, вводит «hello»)
  • IME отображает список кандидатов
  • Пользователь нажимает Enter, ожидая подтвердить исходные введённые буквы без выбора кандидатов

Фактическое поведение:

  • Клавиша Enter перехватывается чат-интерфейсом и напрямую вызывает функцию «отправить сообщение»
  • Это приводит к отправке содержимого буфера IME некорректно или отправке неполного сообщения

Корневая причина:

Это конфликт сочетаний клавиш между двумя уровнями:

  1. Уровень IME: Enter = подтвердить текущий ввод (композицию)
  2. Уровень приложения: Enter = отправить сообщение

Чат-приложение некорректно обрабатывает «состояние композиции» IME, из-за чего перехватывает событие нажатия клавиши Enter, пока IME ещё обрабатывает ввод.


Это видео с демонстрацией/воспроизведением ошибки:

Каждый раз при нажатии клавиши Enter отправляется новое сообщение.

1 лайк

Один из пользователей моего сообщества опубликовал пользовательский скрипт, который решил эту проблему — возможно, это будет полезно: 私聊聊天优化建议 - #17 by Haleclipse - 运营反馈 - LINUX DO

Поможет ли смена настройки на «отправлять по Ctrl + Enter»? Тогда это может стать более простым решением.

Здесь, на Meta, вы можете найти эту настройку по адресу https://meta.discourse.org/my/preferences/chat

1 лайк

Это должно исправить проблему после слияния:

Обратите внимание, что я также пробовал на google.com, например: первый вариант не сработает с enter, нужно использовать 1, чтобы он сработал.

2 лайка

Эта тема была автоматически закрыта через 7 дней после последнего ответа. Новые ответы больше не принимаются.