Дать jstest
попытка. Эта статья обсуждает свое использование, названное: flightgear.org - Устройство ввода данных. Кажется, установлен по умолчанию в большинстве дистрибутивов. Кроме того, вот ссылка на jstest
страница справочника.
В основном необходимо определить, какое устройство джойстик присваивается. Загляните dmesg
файл журнала после того, как Вы включаете его для получения этой информации. Могло бы быть что-то как /dev/input0
.
$ dmesg | grep Joystick
input0: USB HID v1.00 Joystick [SAITEK CYBORG 3D USB] on usb2:3.0
Затем выполните эту команду:
$ jstest /dev/input0
remember-other-frame
вызывает switch-to-buffer-other-frame
который вызывает display-buffer
с переменной pop-up-frames
установленной в t
. Это приводит к вызову make-frame
с аргументом pop-up-frame-alist
. Функция make-frame
создает кадр на том же устройстве отображения, что и текущий выбранный кадр. (То, что в Emacs называется фреймом, в графических интерфейсах называется окном, за исключением того, что фрейм может находиться и в текстовом терминале). В этот момент Emacs все еще работает в режиме демона, поэтому выбранного фрейма нет. Таким образом, make-frame
не видит среды GUI и думает, что должен создать фрейм терминала, но текстового терминала тоже нет, что приводит к непонятному сообщению об ошибке "Unknown terminal type".
remember-other-frame
- правильная функция для вызова из существующего окна Emacs, но технически неправильная из emacsclient. Там мы должны использовать опцию -c
, чтобы заставить Emacs создать новый фрейм, и простую функцию remember
.
emacsclient -a "" -c -e "(remember)"
Однако это не очень хорошо, потому что remember
создает окно, которое нужно закрыть с помощью C-c C-c
(это также сохраняет заметку), затем фрейм нужно закрыть с помощью C-x 5 0
. Если вы забудете C-c C-c
(что тем более вероятно, потому что сообщение набрать C-x 5 0
перезаписывает сообщение набрать C-c C-c
в области эха), то заметка даже не сохранится.
Инструкция make-frame
явно создаёт кадр на текущем дисплее X.
emacsclient -a "" -e "
(let ((pop-up-frame-alist \`((window-system . x)
(display . \"$DISPLAY\")
,@pop-up-frame-alist)))
(remember-other-frame))"
Вы можете записать все это в одну строку, только убедитесь, что не изменили пунктуацию.
emacsclient -a "" -e "(let ((pop-up-frame-alist \`((window-system . x) (display . \"$DISPLAY\") ,@pop-up-frame-alist))) (remember-other-frame))"
Если вместо этого вы можете вызвать (make-frame)
, вы можете указать ему всегда создавать X-кадр, чтобы избежать этой ошибки, например:
(select-frame
(make-frame
'((window-system . x))))