LINUX.ORG.RU

куда деваются кириллические кнопки?

 , ,


0

1

uname -a возвращает

Linux d8 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) i686 GNU/Linux

Работаю с форком hemlock, он находится здесь: https://bitbucket.org/budden/oduvanchik

Пытаюсь заставить его работать с utf-8 и выводить кириллицу. На данный момент он успешно открывает файлы с кириллицей. А вот ввести кириллицу с клавиатуры не получается. В исследованиях дошёл до того, что кнопка «ю» нормально проходит в функции xlib::enqueue-event:

(defun enqueue-event (new-event display)
  (declare (type reply-buffer new-event)
	   (type display display))
  ;; Place EVENT at the end of the event queue for DISPLAY
  (let* ((event-code (event-code new-event))
	 (event-key (and (index< event-code (length *event-key-vector*))
			 (svref *event-key-vector* event-code))))
    (declare (type array-index event-code)
	     (type (or null keyword) event-key))
    (if (null event-key)
	(unwind-protect
	    (cerror "Ignore this event" "No handler for ~s event" event-key)
	  (deallocate-event new-event))
      (with-event-queue-internal (display)
	(threaded-enqueue new-event
			  (display-event-queue-head display)
			  (display-event-queue-tail display)
			  reply-next reply-buffer)
	(unless (display-new-events display)
	  (setf (display-new-events display) new-event))))))

Как я понимаю, эта ф-я отправляет нажатие кнопки в очередь сообщений. При этом, независимо от раскладки, event-key равен :key-press .

Далее, в какой-то момент создаётся, как я понял, обработчик событий для окна:

(defmethod device-make-window ((device bitmap-device) start modelinep window font-family
                               ask-user x y width-arg height-arg proportion)
  (let* ((display (bitmap-device-display device))
         (thumb-bar-p (value oduvanchik::thumb-bar-meter))
         (hunk (make-bitmap-hunk
                :font-family font-family
                :end the-sentinel  :trashed t
                :input-handler #'window-input-handler
                :device device
                :thumb-bar-p (and modelinep thumb-bar-p))))
    ...
    (multiple-value-bind (xparent xwindow)
        (maybe-make-x-window-and-parent window display start ask-user x y
                                        width-arg height-arg font-family
                                        modelinep thumb-bar-p proportion)
      (unless xwindow (return-from device-make-window nil))
      (let ((window-group (make-window-group xparent
                                             (xlib:drawable-width xparent)
                                             (xlib:drawable-height xparent))))
        (setf (bitmap-hunk-xwindow hunk) xwindow)
        (setf (bitmap-hunk-window-group hunk) window-group)
        (setf (bitmap-hunk-gcontext hunk)
              (default-gcontext xwindow font-family))
        ;;
        ;; Select input and enable event service before showing the window.
        (setf (xlib:window-event-mask xwindow) child-interesting-xevents-mask)
        (setf (xlib:window-event-mask xparent) group-interesting-xevents-mask)
        (add-xwindow-object xwindow hunk *oduvanchik-windows*)
        (add-xwindow-object xparent window-group *oduvanchik-windows*))
      ...

Как я понял, здесь устанавливается маска для фильтрации событий, но событие keypress в неё входит. Однако в функцию window-input-handler событие по нажатию на кнопку «ю» уже не приходит. Куда копать?

★★★★★

Ответ на: комментарий от den73

Вопрос отпал. Нашёл место, где нужно подправить. В двух словах не опишешь, но проблема в самом приложении. События приходят, но при дальнейшей обработке (в ф-ии hunk-key-input, которая неведомым способом назначается на обработку событий) эти события плохо обрабатываются.

den73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.