シェルコマンドを使用して改行を削除します(KDE グローバル ショートカットで動作する必要があります)

シェルコマンドを使用して改行を削除します(KDE グローバル ショートカットで動作する必要があります)

現在選択されているテキストから改行を取り除くショートカットが必要です。コマンドを 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し、インストールしたくないのですが、役に立つならインストールできますコピーqpython-pyperclip、 またはxorg-xクリップボードメインの Arch リポジトリにある他のツールも検討できます。

答え1

私が思いついたのは次の通りです:

sh -c 'xclip -o -sel p | perl -p -e "s/-\n//g"|  tr "\n" " "| xclip -sel c; xdotool key --clearmodifiers ctrl+v'

最初の部分を perl に置き換えました。シーケンスを文字列ではなく 2 つの独立した文字として認識しているtrことに気付きました。tr-\n

ここで perl の提案を見つけました:
https://stackoverflow.com/a/7697604/463994

おそらく、単一の perl コマンドでこれを行う方法があると思いますが、私はそれを知りません。より良い回答を歓迎します。

編集:これがより良い解決策、Rakesh Sharma に感謝します (コメントを参照)。

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 キーをクリアする必要があるため追加しました。

関連情報