クリップボードに含まれるテキストの書式を削除し、一部の要素を保持する必要があります。最も重要なのは「New Line」文字です。単純なスクリプトでは、効果は次のとおりです。
variable=$(xsel --clipboard)
問題は、テキストがすべて同じ行にあるように見えるため、「改行」文字がすべて失われることです。
1) これを避ける方法はありますか?場合によっては、Windows 形式 (したがって改行文字は "\r\n") からテキストをコピーし、時には *nix (したがって改行文字は "\n") からテキストをコピーします。
2)前の質問が最も重要です。しかし、「太字」、「イタリック体」、「下線」の書式要素を維持する方法もありますか?これらのシェルコマンドも失われるからです。
とにかくありがとうございます!
答え1
はい。コマンド置換はすべての末尾の改行文字1を削除します。
この問題を解決するには:
var=$(xsel --clipboard; echo .)
var=${var%?}
.\n
その出力に追加されます。次に${var%?}
(\n
コマンドの置き換えによって処理された)を使用してポイントを削除します。
を除いて、zsh
シェル変数にはNULバイトを含めることはできません。
終了状態を維持するには、次のようにします。
var=$(xsel --clipboard; ret=$?; echo .; exit "$ret")
ret=$?
var=${var%?}
$var
拡張時に引用を忘れないでください。
printf %s "$var"
ヘルパー機能:
cmdsubst() {
_var=$1; shift
eval "$_var="'$("$@"; ret=$?; echo .; exit "$ret")
_ret=$?
'"$_var=\${$_var%?}"
return "$_ret"
}
次のように使用されます。
cmdsubst var xsel --clipboard
「太字」を維持するために、一部のツールはUTF8文字列に加えてCLIPBOARD選択をtext / htmlにエクスポートします。この場合(最新バージョンを使用xclip
)、次のことができます。
cmdsubst html xclip -sel c -o -t text/html
xclip -sel c -o -t TARGETS
CLIPBOARD選択の現在の所有者によって提供された選択対象を表示するには、出力を表示します。
上記のiceweaselのMikelの投稿に私のコメントの一部をコピーした後の例:
$ xclip -sel c -o -t TARGETS
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/x-moz-url-priv
$ xclip -sel c -o -t text/html
<span class="comment-copy"><i>should</i> remove <i>only one</i> trailing newline</span>
$ xclip -sel c -o -t TEXT
should remove only one trailing newline
11つの例外はこのシェルスイートで、この構文を使用して後処理を実行したくrc
ないと言うことができます。var = ``(){xsel --clipboard}