常に親BoxElementと同じ幅の線を描画しますか?

マーティン・カウイ:

祝福さBoxElementfrom を使用してチャットの履歴を表示しています。

文はを使用して追加されpushLineます。明確にするために、日は行で区切られています(別の文字列はを使用して追加されていますpushLine)。各行は親と同じ幅BoxElementです。

ただし、TUIのサイズが変更されると、線は収まりません。

2つの質問があります。

  1. その線はどのように新しい幅に適応できますか?
  2. (ボーナスポイント)テキストをその行の中央に配置するにはどうすればよいですか?

問題の例を以下に示します。

/**
 * Example.ts
 */
import * as blessed from 'blessed';

const screen = blessed.screen({
    smartCSR: true,
    title: 'Chatr',
    dockBorders: true
});

const chatBox = blessed.box({
    parent: screen,
    title: 'Chatbox',
    top: 'top',
    left: 'center',
    height: '100%',
    width: '100%',
    border: {
        type: 'line'
    },
});
screen.append(chatBox);
screen.render();

chatBox.pushLine("This is the first line");

 // This is the separator - and will not resize with the terminal 
chatBox.pushLine("_".repeat(chatBox.width as number - 2));

chatBox.pushLine("This is a second line");
screen.render();

コードを実行するts-node ./Example.jsと、次のようにレンダリングされます。

┌────────────────────────────────────────────────────────────────────────────────────────┐
│This is a line                                                                          │
│________________________________________________________________________________________│
│This is a second line                                                                   │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
│                                                                                        │
└────────────────────────────────────────────────────────────────────────────────────────┘

端末のサイズを変更すると、次の結果が得られます。

┌──────────────────────────────────────────────────────────┐
│This is a line                                            │
│__________________________________________________________│
│______________________________                            │
│This is a second line                                     │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
│                                                          │
└──────────────────────────────────────────────────────────┘
ダニエレ・リッチ:

blessedセパレーターのようなものを実装していないようですが、各セパレーターの行インデックスを格納し、resizeイベント時にそれらを変更する単純なクラスを使用して、それらを自分で簡単に実装できます。何かのようなもの:

import * as blessed from "blessed";

// The required Separators class
class Separators {
  private box: any;
  private separators: number[] = [];

  public constructor(box: any) {
    this.box = box;

    box.on("resize", () => {
      const sep = this.sep();

      this.separators.forEach(line => {
        box.deleteLine(line);
        box.insertLine(line, sep);
      });
    });
  }

  public add(): void {
    const { box, separators } = this;

    separators.push(box.getLines().length);
    box.pushLine(this.sep());
  }

  private sep(): string {
    return "_".repeat((this.box.width as number) - 3);
  }
}

const screen = blessed.screen({
  smartCSR: true,
  title: "Chatr",
  dockBorders: true
});

const chatBox = blessed.box({
  parent: screen,
  title: "Chatbox",
  top: "top",
  left: "center",
  height: "100%",
  width: "100%",
  border: {
    type: "line"
  }
});
const sep = new Separators(chatBox); // <- the new Separator bound to the box
screen.append(chatBox);
screen.render();

chatBox.pushLine("This is the first line");

// This is the separator - and it resize with the terminal
sep.add();

chatBox.pushLine("This is a second line");
chatBox.pushLine("While this is the third line");

// This is another separator - it resize with the terminal as well
sep.add();

chatBox.pushLine("And last this is the last line");

screen.render();

ボーナスポイントについては、簡単に達成できるはずです。難しいのは、ボックスの幅よりも長いラインを中央に配置することです。中央に配置するためにさらに多くのラインに分割すると、すべてのラインインデックス(中央に分割されたラインの隣)が変更され、追跡しにくくなります。

考えられる妥協案は、ボックスの幅より短い行のみを中央揃えにして、適切な量のスペースで左パディングすることです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

常に親BoxElementと同じ幅の線を描画しますか?

分類Dev

子<ul>の最小幅を親の<li>幅と同じに設定します

分類Dev

「Position:fixed」divの幅を親div(flexbox item)と同じに設定します

分類Dev

分岐した子は常に親のファイルIDと同じファイルIDを取得しますか?

分類Dev

子divの境界線の長さは、親divと同じ幅ですか?

分類Dev

線の長さを変更して同じ幅を維持しますか?

分類Dev

親テーブルと常に同じ行数を持つ子テーブルを設定しますか?

分類Dev

jQuery:各<figure>親にその<img>子と同じ幅を与えます

分類Dev

iOS-サブビューの幅を親と同じに設定します(objective-c)

分類Dev

要素を動的サイズの画像と同じ幅にしますか?

分類Dev

親の幅を子と同じに設定する

分類Dev

親と同じ幅の後に疑似要素を定義する方法::

分類Dev

同じUIDとGIDのペアは常に存在しますか?

分類Dev

2本の線を同じ長さに伸ばしますか?

分類Dev

子の幅と高さを親と同じに設定できないのはなぜですか?

分類Dev

NEATアルゴリズムを使用すると、2つのゲノムの子は、常に最も適切な親と同じ構造になりますか?

分類Dev

固定divを親divと同じ幅にし、そのパディング

分類Dev

DropDownListForの幅をBootstrapクラスのTextBoxForの幅と同じにすることはできますか?

分類Dev

上のdivをその下のdivと同じ幅にします

分類Dev

NSBezierPathでさまざまな線幅を描画しますか?

分類Dev

ツールチップの幅を親要素とまったく同じように設定するにはどうすればよいですか?

分類Dev

自動幅の3つのdivは、最も広いdivと同じ幅になり、各divをそのコンテンツと同じ幅にします。

分類Dev

フレックスアイテムの幅を親と同じにする

分類Dev

常に開始線と終了線があるCSSグリッド線を描画します

分類Dev

Double.toStringは常にdoubleリテラルとまったく同じものを生成しますか?

分類Dev

Flexbox:子を親と同じ幅にする方法は?

分類Dev

列のCSS「display:table-cell」-最初の列の幅を最も幅の広い単語と同じにします

分類Dev

Python for-loopは、3Dの場合、常に同じ線をプロットします(matplotlibを使用)

分類Dev

ImageViewを中央に配置し、幅と高さを親の幅の半分にしますか?

Related 関連記事

  1. 1

    常に親BoxElementと同じ幅の線を描画しますか?

  2. 2

    子<ul>の最小幅を親の<li>幅と同じに設定します

  3. 3

    「Position:fixed」divの幅を親div(flexbox item)と同じに設定します

  4. 4

    分岐した子は常に親のファイルIDと同じファイルIDを取得しますか?

  5. 5

    子divの境界線の長さは、親divと同じ幅ですか?

  6. 6

    線の長さを変更して同じ幅を維持しますか?

  7. 7

    親テーブルと常に同じ行数を持つ子テーブルを設定しますか?

  8. 8

    jQuery:各<figure>親にその<img>子と同じ幅を与えます

  9. 9

    iOS-サブビューの幅を親と同じに設定します(objective-c)

  10. 10

    要素を動的サイズの画像と同じ幅にしますか?

  11. 11

    親の幅を子と同じに設定する

  12. 12

    親と同じ幅の後に疑似要素を定義する方法::

  13. 13

    同じUIDとGIDのペアは常に存在しますか?

  14. 14

    2本の線を同じ長さに伸ばしますか?

  15. 15

    子の幅と高さを親と同じに設定できないのはなぜですか?

  16. 16

    NEATアルゴリズムを使用すると、2つのゲノムの子は、常に最も適切な親と同じ構造になりますか?

  17. 17

    固定divを親divと同じ幅にし、そのパディング

  18. 18

    DropDownListForの幅をBootstrapクラスのTextBoxForの幅と同じにすることはできますか?

  19. 19

    上のdivをその下のdivと同じ幅にします

  20. 20

    NSBezierPathでさまざまな線幅を描画しますか?

  21. 21

    ツールチップの幅を親要素とまったく同じように設定するにはどうすればよいですか?

  22. 22

    自動幅の3つのdivは、最も広いdivと同じ幅になり、各divをそのコンテンツと同じ幅にします。

  23. 23

    フレックスアイテムの幅を親と同じにする

  24. 24

    常に開始線と終了線があるCSSグリッド線を描画します

  25. 25

    Double.toStringは常にdoubleリテラルとまったく同じものを生成しますか?

  26. 26

    Flexbox:子を親と同じ幅にする方法は?

  27. 27

    列のCSS「display:table-cell」-最初の列の幅を最も幅の広い単語と同じにします

  28. 28

    Python for-loopは、3Dの場合、常に同じ線をプロットします(matplotlibを使用)

  29. 29

    ImageViewを中央に配置し、幅と高さを親の幅の半分にしますか?

ホットタグ

アーカイブ