У меня есть этот сценарий, который я назначаю сочетания клавиш для имитации вставки через средний щелчок:
#!/bin/bash
aa=0
for randstring in `xsel`
do
if [[ "$randstring" =~ [ěščřžýáíéúůóťďň] ]]
then
xxx=`xsel|sed 's/ě/\\\[ecaron]/g' |sed 's/š/\\\[scaron]/g' |sed 's/č/\\\[ccaron] g' |sed 's/ř/\\\[rcaron]/g' |sed 's/ž/\\\[zcaron]/g' |sed 's/ý/\\\[yacute]/g' |sed 's/á/\\\[aacute]/g' |sed 's/í/\\\[iacute]/g' |sed 's/é/\\\[eacute]/g' |sed 's/ú/\\\[uacute]/g' |sed 's/ů/\\\[uring]/g' |sed 's/ó/\\\[oacute]/g' |sed 's/ď/\\\[dcaron]/g' |sed 's/ň/\\\[ncaron]/g' |sed 's/ť/\\\[tcaron]/g' |sed ':a;N;$!ba;s/\n/\\n/g'`
xvkbd -text "$xxx" 2>/dev/null
aa=1
break
else
aa=0
fi
done
if [[ $aa -eq 0 ]]
then
xsel | xvkbd -file - 2>/dev/null
fi
Я использую -text
с xvkbd, когда текст написан на чешском языке (мой язык), потому что xvkbd не понимает диакритические знаки вроде ě, но только в форме, подобной \[ecaron]
. Теперь с этой опцией, если есть новая строка int xsel, она не печатается с xvkbd. Тем не менее, когда я делаю
xx="---8<-----\nToday date is: $(date +%Y%m%d)\n---8<-----"
xvkbd -text "$xx" 2>/dev/null
Новые строки печатаются.
Я подозреваю, что проблема в последнем выражении sed ':a;N;$!ba;s/\n/\\n/g'
, но я не знаю, как сделать это лучше. Я думаю, что мне нужно как-то позаботиться о \n
s?