Odpowiedzi:
Krótka historia:
użyj skryptu.
#! /bin/sh
# With some window selection magic, or a sleep
# if you want to do that manually.
xdotool type word
xdotool key Return
I umieść ścieżkę skryptu w Exec
polu.
Długa historia:
Według strony xdotool
podręcznika :
type
Supports newlines and tabs (ASCII newline and tab).
With respect to "COMMAND CHAINING", this command consumes the
remainder of the arguments and types them. That is, no commands can
chain after 'type'.
Łańcuch poleceń za pomocą ;
lub &
nie jest możliwy, ponieważ jest to składnia powłoki, a aplikacje startowe nie obsługują składni powłoki. Jeśli jednak wszystko, co chcesz zrobić, to nacisnąć Enterpo wpisaniu czegoś, istnieje runda.
Kiedy mówi „nowa linia” ASCII, nie znaczy to gołe \n
. I podstawianie poleceń ( xdotool type "$(printf '\n')"
powiedzmy) zjada końcowe znaki nowej linii. Po tym xdotools
wpisie na forum spróbowałem:
xdotool type "$(printf 'date\n ')"
I zadziałało. Ale to działa tylko wtedy, gdy po znaku jest jakaś postać \n
, a to oczywiście pozostawia spację, która nie byłaby tym, czego chcesz. Zmodyfikowałem to, aby:
xdotool type "$(printf 'date\n\e ')"
I to działa i nie pozostawia końcowej przestrzeni. Może to jednak powodować problemy dla tych, którzy używają trybu Vi w swojej powłoce.
Dzięki komentarzom @ steeldriver zorientowałem się, że to dlatego, że wypróbowałem to na terminalu, na którym wykonywałem polecenia. Wystarczyła niewielka przerwa między naciśnięciem Entera xdotool
poleceniem, aby poprawnie zarejestrować pojedynczą linię. A zatem:
sleep 0.1; xdotool type $'date\n'
Więc albo przedłuż linię, cytując ją:
xdotool type 'date
'
lub użycie interpretacji powłoki, jak sugeruje @steeldriver, wygląda jak właściwa opcja.
Jednak skrypt zawierający:
#! /bin/sh
sleep 1
xdotool type date
xdotool key Return
w Exec
polu działało dobrze. Rzeczywiście, zawsze zalecam używanie skryptu do złożonych poleceń w pliku na pulpicie.
Możesz mieć skrypt /usr/bin/xdotool
w shebang, ale strona mówi, że „ script
tryb nie jest w pełni rozwinięty i może spaść poniżej twoich oczekiwań”, więc trzymałem się skryptów.
Mogłem widzieć rzeczy, ale podczas moich pierwszych prób musiałem umieścić (małe) . To był artefakt wypróbowania go na terminalu, który wykonywał polecenia zamiast w innym oknie.sleep
między poleceniami type
akey
xdotool type 'word
następnie „enter” klucz, a następnie zamknięcia '
, podobnie jak $'word\n'
(w którym bash rozszerza \n
przed przekazaniem argument do dosłownego nowej linii xdotool
).
'
jednego lub dwóch \n
za pomocą $
lewy).
sleep
(patrz uwaga w małym tekście). Nie zmieniałem okien i po prostu wypróbowywałem je w tym samym oknie, ale z sleep 1
, obie metody działały zarówno z tym samym oknem, jak i po przełączeniu. Wydaje mi się, że moje własne naciśnięcie klawisza Enter w jakiś sposób zakłóciło nową linię xdotool. Jednak w przypadku bardziej złożonych wymagań dotyczących pliku pulpitu nadal polecam skrypt.
Wydaje mi się, że aplikacja nie analizuje wielu poleceń, ale traktuje to jako jedno polecenie. W związku z tym uczyń go pojedynczym poleceniem, zawijając w nim wywołanie powłoki ...
bash -c 'xdotool type date; xdotool key Return'
Teraz możesz także wykonywać inne czynności związane z powłoką ...
bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'
Zauważ, że polecenie „data” użyte w tym ostatnim wierszu zawiera nowy wiersz! i „xdotool” wyświetli to.
UWAGA: jeśli robisz to jako makro klawiatury, dodałbym jeszcze kilka opcji do „xdotool”, aby usprawnić to działanie ...
bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
xdotool type $'word\r'
, gdzie$''
ucieka\r
do czegoś takiego jak return (\n
tutaj nie działa).