リッチテキストエディタに貼り付ける際にクリップボードデータの`white-space` CSSプロパティが尊重されない

はい。情報がお役に立てば幸いです。以前の発言を繰り返したいと思います。

しかし、もし私が間違っていたら喜んで訂正します :slightly_smiling_face:

  1. 次の C++ コードをコピーします。
    #include <iostream>
    int main() {
      std::cout << __FILE__;
    }
    
  2. ポストコンポーザーを開きます。
  3. コンポーザーを「リッチテキストエディター」モードにします。
  4. コピーしたコンテンツをコンポーザーに貼り付けます。

:slightly_frowning_face: コンテンツが破損しています。

#include
int main() {
std::cout << FILE;
}

iostream はサポートされていない HTML タグに似ているため抑制され、__FILE__ は太字マークアップとして扱われています)

これはユーザーエラーと見なされる可能性があります。なぜなら、プロセではないコンテンツを貼り付ける前にコードブロックをトリガーすることで回避できるからです。しかし、貼り付けたコンテンツに後からコードブロックフォーマットを適用するという代替ワークフローも同様に有効であると期待できるかもしれません(Markdownエディターを使用する場合と同様です)。

機器

  • 公式またはサードパーティのいずれかの Arduino ボード

手順

  1. Arduino Web サイトの「ソフトウェア」ページからダウンロードできる Arduino IDE 2.3.6 をインストールします。
    https://www.arduino.cc/en/software/#ide-download-section
  2. Arduino IDE を起動します。
  3. Arduino IDE メニューから File > New Sketch を選択します。
  4. 新しいスケッチのコンテンツを次のコードに置き換えます。
    void setup() {
      Serial.begin(9600);
      while (!Serial) {}  // シリアルポートが開くまで待機します。
      delay(500);         // 一部のボードでは、シリアルポート初期化後に遅延が必要です。
      Serial.println("foo");
      Serial.println("bar");
    }
    void loop() {}
    
  5. Arduino ボードにスケッチをアップロードします。
  6. Arduino IDE メニューから Tools > Serial Monitor を選択して、まだ開いていない場合は Serial Monitor ビューを開きます。
  7. Serial Monitor ビューのボーレートメニューから「9600」を選択します。
  8. Arduino ボードにスケッチをアップロードします。
  9. Serial Monitor ビューのフィールドからシリアル出力を選択します。
  10. 選択したコンテンツをコピーします。
  11. Discourse ポストコンポーザーを開きます。
  12. コンポーザーを「リッチテキストエディター」モードにします。
  13. コピーしたコンテンツをコンポーザーに貼り付けます。

:slightly_frowning_face: コピーしたコンテンツの各行が個別のコードブロックに配置されます。

foo

bar


クリップボードコンテンツを検査すると、「text/plain」タイプのコンテンツに加えて、次の「text/html」タイプのコンテンツも含まれていることがわかります。

foo
bar
<div style="color: rgb(78, 91, 97); font-family: monospace; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; position: absolute; left: 0px; top: 0px; height: 18px; width: 1862px;"><pre style="margin: 0px;">foo
</pre></div><div style="color: rgb(78, 91, 97); font-family: monospace; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; position: absolute; left: 0px; top: 18px; height: 18px; width: 1862px;"><pre style="margin: 0px;">bar</pre></div>

Arduino IDE 2.x のシリアルモニターは、「text/html」タイプのコピーされたコンテンツの各行を pre タグで誤ってラップするため、Discourse のリッチテキストエディターによって貼り付けられたコンテンツの各行が個別のコードブロックとしてレンダリングされるのは、正しく予期された動作です。

上記で説明した他の問題と同様に、予期しないフォーマットは、コンテンツを貼り付ける前にコードブロックフォーマットを積極的にトリガーすることで回避できます。

「いいね!」 2