Мне нужна комбинация клавиш для удаления новых строк из текста в текущем выделении. Я хочу поместить свою команду в глобальную комбинацию клавиш KDE, и я уже знаю, как это сделать. Команда, которую я придумал, выглядит так:
sh -c 'xclip -o -sel p | tr -d "\-\n" | tr "\n" "\ " | xclip -sel c; xdotool key --clearmodifiers ctrl+v'
Это делается для того, чтобы взять текущий выделенный фрагмент и пропустить его через конвейер, tr
чтобы удалить переносы в конце строк (и объединить фрагменты), затем заменить оставшиеся переносы строк пробелами, затем поместить это в буфер обмена и вставить (там, где находится фокус).
Проблема: не заменяет символы новой строки на пробелы. tr "\n" "\ "
. Вместо этого он заменяет новые строки ничем. Я пробовал все виды представления пробела, и ни один из них не работает
Я пробовал xdotool type
, но это съедает весь пробел и запускает все вместе даже без использования tr
.
Я бы предпочел использовать выделение (первичное или вторичное) вместо буфера обмена, и не использовать его, xdotool key ctrl+v
если это возможно. Еще лучше, если я смогу xdotool
полностью избежать этого из-за неожиданного способа обработки пробелов, как показал мой опыт.
У меня не установлено xvkbd
и я предпочитаю не устанавливать. Однако, если это поможет, я могу установитькопия,питон-pyperclip, илиxorg-xclipboard. Я также могу рассмотреть другие инструменты в основных репозиториях Arch.
решение1
Вот что у меня получилось:
sh -c 'xclip -o -sel p | perl -p -e "s/-\n//g"| tr "\n" " "| xclip -sel c; xdotool key --clearmodifiers ctrl+v'
Я заменил первый tr
на perl. Я понял, что это tr
воспринимает последовательность -\n
как два независимых символа вместо строки.
Я нашел предложение Perl здесь:
https://stackoverflow.com/a/7697604/463994
Вероятно, есть способ сделать это одной командой perl, но я его не знаю. Я приму лучшие ответы.
EDIT: вотлучшее решение, спасибо Ракешу Шарме (см. комментарии):
sh -c 'xclip -o -sel p | perl -pe "s/-\n// || s/\n/ /" | xclip -sel c; xdotool key --clearmodifiers ctrl+v; xdotool key Alt'
Я добавил, xdotool key Alt
потому что у меня есть сочетание клавиш, привязанное к комбинации клавиш Alt, и оно требуется для очистки клавиши Alt.