Команда типа xdotool, съедающая символы

Команда типа xdotool, съедающая символы

Я пытаюсь заставить xmonad набирать общую последовательность символов всякий раз, когда я нажимаю простую комбинацию клавиш. Одним из примеров этой проблемы является простой ввод моего адреса электронной почты.

Вот как у меня выглядит файл конфигурации для xmonad:

import XMonad
import XMonad.Config.Gnome (gnomeConfig)
import XMonad.Util.CustomKeys (customKeys)
import XMonad.Util.EZConfig

main = xmonad $ gnomeConfig {
  keys = customKeys delKeys insKeys,
  logHook = return ()
  }
  where
    -- Remap mod-p to dmenu and mod-[sd] to swapping xinerama screens.
    delKeys :: XConfig l -> [(KeyMask, KeySym)]
    delKeys XConfig { modMask = modMask } =
      [ (modMask, xK_p), (modMask, xK_w), (modMask, xK_e) ]

    insertEmailAddress :: KeyMask -> [((KeyMask, KeySym), X())]
    insertEmailAddress modMask = [ ((noModMask, xK_Menu), spawn "xdotool type [email protected]") ]

    insKeys :: XConfig l -> [((KeyMask, KeySym), X())]
    insKeys XConfig { modMask = modMask } = insertEmailAddress modMask

Однако, когда я нажимаю клавишу меню (она находится в правом нижнем углу клавиатуры), я получаю только последнюю половину или около того. Например: [email protected]или [email protected]. Совершенно непредсказуемо, где начнется печать.

Я нашел обходной путь, изменив xdotoolкоманду на . Кажется, это работает без сбоев, но я понятия не имею, почему. Есть мысли?xdotool sleep 0.1 type [email protected]

с использованием xmonad 0.11 и xdotool версии 3.20140217.1

решение1

Это был именно тот --syncвариант, который я искал!

Однако эта --syncопция существует только для определенного набора команд get или search.

Решение оказалось таким:xdotool getwindowfocus windowfocus --sync type [email protected]

Здесь происходит следующее: мы сначала получаем окно, находящееся в фокусе, через getwindowfocus( getactivewindowявляется альтернативой, если другая не работает).

Все, что мы делаем по-другому, это получаем активное окно и устанавливаем его на то же самое. Ключевое отличие — наличие опции, --syncкоторая заставляет xdotoolждать, пока предыдущая команда будет применена.

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

решение2

Возможно, вам придется увеличить задержку между нажатиями клавиш, используя --delay(по умолчанию 12 мс):

xdotool type --delay 100 [email protected]

Связанный контент