クリップボードのテキストから部分的に書式を削除します。

クリップボードのテキストから部分的に書式を削除します。

クリップボードに含まれるテキストの書式を削除し、一部の要素を保持する必要があります。最も重要なのは「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 TARGETSCLIPBOARD選択の現在の所有者によって提供された選択対象を表示するには、出力を表示します。

上記の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}

関連情報