Как использовать символ звонка (BEL, CTRL-G, \x07) с xterm.js?
Как добавить использование колокольчика с Xterm.js? Я вижу пару записей в исходных настройках параметров по умолчанию, но ничего не получаю, отправляю ли я это из оболочки или пишу прямо в терминал, даже если для них установлено значение true. Я попытался перегрузить функцию term.bell с помощью функции, содержащей window.navigator.vibrate, и это работает, если я вызываю ее напрямую, но не срабатывает в ответ на символ звонка.
1 ответ
Хорошо. Таким образом, тестирование показало, что ничто не блокирует символ звонка ("\x07" или "\u0007") от доступа к xterm.js. Он просто не отвечает, даже если вы включите флаги в опциях. Код в исходном коде выглядит так, как будто он должен работать, но что-то внутреннее не связано. Поскольку я избегаю реальных изменений в исходном коде, чтобы сделать обновления к xterm.js прямо и из коробки, я немного поработал. Вот хак, чтобы заставить работать персонаж колокола:
Создайте функцию, которая запускает событие "message" из вашего веб-сокета. В нем проверьте на совпадение по BEL. Тогда пусть это сделает ваше вуду, если это обнаружит. Что-то вроде:
sock.addEventListener('message',function(v){ if(v.match(/\x07/)){ /*voodoo here*/ } });
Где v - это событие, \x07 - это BEL, а voodoo - это код или вызов, чтобы кратковременно вспыхнуть белым экраном, сделать щебетание, вибрировать, если вы передвигаетесь по "мобильному телефону", или открыть портал в измерении с одним носком.
Досадно, что теперь мне нужно поискать больше кодов ANSI и найти шаблон, так как некоторые заканчиваются символом BEL. Так что это будет работать само по себе, но будет отключено некоторыми кодами, не предназначенными для действия в качестве BEL, поскольку они содержат этот символ. Подробнее об этом позже....
К вашему сведению, не уверен, что это работает с term.attach(). У меня есть своя собственная вещь, которая в любом случае выполняет некоторую предварительную обработку, так что в основном все, что мне нужно было сделать, это соединить в if/match, но вырезать это, приведенный выше код является минимальной версией вырезки-вставки.
Надеюсь, это поможет кому-то еще. Ошибка