Powerline: マルチラインシェル

作成日 2013年04月24日  ·  16コメント  ·  ソース: powerline/powerline

2行のシェルプロンプトを実現するために、シェル構成の「segment_data」に以下を追加しようとしましたが、三角形が次の行に配置されました。

    "cwd": {
        "after": "\n"
    }

結果:

Selection_029

core cshell enhancement

最も参考になるコメント

全てのコメント16件

私はそれを機能させるためにいくつかのハックを推測することができますが、ここに別の提案があります:使用する

# Theme file
{
    "segments": {
        "above": [
            {
                "left": [
                    # First line left segments
                ],
                "right": [
                    # First line right segments
                ]
            },
            {
                # Same for second line
            }
        ],
        "left": [
            # Usual last line segments
        ],
        "right": [
            # Usual last line right segments
        ]
    }
} 

(コメントを許可するためにYAML構文を使用)出力は次のようになります

First line left segments >   < First line right segments
Second line left segments >  < Second line right segments
Left segments > Typed text               < Right segments

@Lokaltog 、これはどのように感じますか?

それはかなりうまくいく可能性があります。 より洗練された解決策は、 segmentsをリストにすることであり、リスト内の各アイテムは、通常のleft / rightの行を表すオブジェクトであると思います。キー。 どう思いますか? ドキュメントを読まないと、それがどのように機能するかはわかりにくいかもしれませんが(ユーザーがリストを見て、各項目が行ではなくセグメントであると考えることは想像できます)、それが大きな問題になるかどうかはわかりません。

私がこのようにそれを持っている理由は2つあります:

  1. * shのもの†以外のすべてのレンダラーでは、最後の行を除くすべての行を無視する必要があります。 これにより、一部の行は明らかに特別になりますが、私のバリアントを優先するには十分ではありません(警告して、一部の行を除くすべての行を無視します。最後の行は必要ありません)。
  2. * shレンダラーでは、最後の行は別の理由で特別です。間にテキストを入力するためのカーソルとスペースがあります。

このように、どういうわけか最後の行を選択する方が良いでしょう、私は上記を好みます。 型付きテキスト用にある程度の幅を予約することについて、以前に提案された構成はまだありません(どこであるか覚えていません)(どちらもシェルで切り捨てを行っていません:辺は別々に計算されるため)。 このオプションが_special_行にのみ存在する場合は自然であり、最後の行にのみ有効である場合は不自然です。

†一部の日本語(AFAIR)vimユーザーグループによって作成された複数行のステータスラインパッチをサポートする場合を除きます。


ちなみに、カーソルの下にプロンプ​​トを表示する方法はありますが、レンダリングには大きな問題があると思います(zshには、プロンプトの下に表示するための完了などのデータもたくさんあり、スクリプトを簡単に記述できることは言うまでもありません。複数の行に拡張します)。

あなたは良い点を述べています、私はあなたの最初の提案に同意します。

プロンプトの別の行に対する@treyhunnerのソリューションは機能しなくなったようです。 テストに使用した最小構成は次のとおりです。

{
    "default_module": "powerline.segments.common",
    "segment_data": {
        "cwd": {
            "after": "\n$ "
        }
    },
    "segments": {
        "left": [
            {
                "name": "cwd"
            }
        ]
    }
}

コマンドラインの結果は次のとおりです。

screen shot 2014-06-22 at 3 13 37 pm

なぜcontrol-J(^ J)文字がそこにあるのかわかりません。

----- BEGIN PGP SIGNED MESSAGE -----
ハッシュ:SHA512

2014年6月23日2:15:13 AMGMT + 03:00、[email protected]は次のように書いています。

プロンプトの別の行に対する@treyhunnerのソリューションのようです
動作しなくなりました。 テストに使用した最小構成は次のとおりです。

{
  "default_module": "powerline.segments.common",
  "segment_data": {
      "cwd": {
          "after": "\n$ "
      }
  },
  "segments": {
      "left": [
          {
              "name": "cwd"
          }
      ]
  }
}

コマンドラインの結果は次のとおりです。

screen shot 2014-06-22 at 3 13 37<br />
  pm

なぜcontrol-J(^ J)文字がそこにあるのかわかりません。


このメールに直接返信するか、GitHubで表示してください。
https://github.com/Lokaltog/powerline/issues/462#issuecomment -46794678

その解決策は、もはや存在しないバグを悪用していました。 そして、あなたは間違っています:CTRL-J文字がそこに存在しません:制御文字が端末に表示されません。

NLが'^J'に置き換えられた理由を尋ねる場合、答えは簡単です。NL_is_CTRL-Jだからです。
----- BEGIN PGP SIGNATURE -----
バージョン:APG v1.1.1

iQJNBAEBCgA3BQJTp1t / MBwfMDI7PjIgHTg6PjswOSAQOzU6QTA9NEA + MjhHIDxr
cC1wYXZAeWFuZGV4LnJ1PgAKCRBu + P2 / AXZZIiQvD / 9S6V8qIfzstsqTStAQrs4t
gSTaFepaQFy9dBxaGch313 + hnfL575KocIwYcvfxKhLfqf6Dy7a + TLtto26DkYYw
lL7Clyjp5vGE6OdzxMQnNjaSpmWUiYYS8UM20pIu3Ejq7rmXAROIqkY7LCRRpbQi
2r7CQzlUQsdjeUz0I8csb5Q4vKDBLy8vTAzcPtcxU8aGHbMoTlHDbiWBkskCf5e8
mAyO2 + Ij0Uarw9AhVyyUPNVwF5W9G01wCzmjsS6W6mAD3Tv / K6zeKJXtfhdWiOfi
YJmdi1qU4DiAKJ4 / USRidAlm8bFfRUbstSzEwc5HoqyMwz9XD6j77IskOIvDjvqA
Qi / i9EFhge8s654FsJmCil1LOLqLc8bDGHvC7uipreozTj / UT5w6hKrf1iHDrv / d
t + kD2rOlX7tftp82RTvzugtPiFBWssOxogM58w5xjL5YOkCIFH6HmOqLnZ8Xui8z
A + qcyRuMKWRyqzSlTRTAlwYYRvFVOUbh3K2iPE0S87XU5Tgfy9iZusdkVTS9 / rat
/ eIajqk38VZ392fuY9dQAthC0RD6VJ5eqXf + RRNjyRtM1QAUEdMEWlEImf052HTU
zhQXHZVvwoMccSWP0vOA7kylmi0GouPai6vL1Vxs0 / 6h3BTdn2p5uuPV0vbwiRol
lX / QG9k137hs0hDJs / b7ng ==
= AleT
-----PGP署名の終了-----

その解決策は、もはや存在しないバグを悪用していました。

この問題の他の場所には、バグやその副作用についての言及はありません。 それでも結構です。 では、Powerlineのシェルコンポーネントに「ラインを破る」ことを伝える新しい方法は何でしょうか。

http://agperson.com/entry/4081で説明されているように、プロンプトを電力線セグメントの情報とは別の行に配置したいと思います。 「after」の改行がバグエクスプロイトと見なされた場合、これを行うにはどうすればよいですか?

そして、あなたは間違っています:CTRL-J文字がそこに存在しません:制御文字が端末に表示されません。

ファイン、パワーラインは、改行文字の代わりに、文字通りの「Control-J」ではなく、「キャレットの後に大文字のJ」を表示します。 Web検索で見つけなければならなかった既存のドキュメントに基づいて、その1つが私をここに導きました。「キャレットの後に大文字のJが続く」は、予期された動作ではありませんでした。

この問題の他の場所には、バグやその副作用についての言及はありません。 それでも結構です。 では、Powerlineのシェルコンポーネントに「ラインを破る」ことを伝える新しい方法は何でしょうか。

この問題があった場合はクローズされます。 現在、複数行のプロンプトを表示する方法はありません。

@gotgenes git://github.com/ZyX-I/powerlineの新しいmultiline-promptブランチをチェックしてください。

注:私は自分のブランチをテストしていました

{
    "default_module": "powerline.segments.common",
    "segment_data": {
        "hostname": {
            "before": " ",
            "args": {
                "only_if_ssh": true
            }
        },
        "virtualenv": {
            "before": "ⓔ  "
        },
        "branch": {
            "before": " "
        }
    },
    "segments": {
        "above": [
            {
                "left": [
                    {
                        "name": "cwd"
                    },
                    {
                        "type": "string",
                        "highlight_group": "cwd",
                        "draw_soft_divider": false,
                        "draw_hard_divider": false,
                        "width": "auto"
                    }
                ],
                "right": [
                    {
                        "name": "user"
                    }
                ]
            }
        ],
        "left": [
            {
                "module": "powerline.segments.shell",
                "name": "mode"
            },
            {
                "name": "hostname"
            },
            {
                "name": "user"
            },
            {
                "name": "virtualenv"
            },
            {
                "name": "cwd",
                "args": {
                    "use_path_separator": true,
                    "ellipsis": "…",
                    "dir_limit_depth": 3
                }
            },
            {
                "module": "powerline.segments.shell",
                "name": "jobnum"
            }
        ],
        "right": [
            {
                "module": "powerline.segments.shell",
                "name": "last_pipe_status"
            },
            {
                "name": "branch"
            }
        ]
    }
}

${XDG_CONFIG_HOME:-$HOME/.config}/powerline/themes/shell/default.json

なぜ「上」を特別な場合にするのか。 セグメント自体を「左」や「右」を含むオブジェクトの配列にしないのはなぜですか? オブジェクトは、最初から最後まで、配列に表示される順序で別々の行としてレンダリングされます。

上記の例を使用すると:

    "segments": [
        {
            "left": [
                {
                    "name": "cwd"
                },
                {
                    "type": "string",
                    "highlight_group": "cwd",
                    "draw_soft_divider": false,
                    "draw_hard_divider": false,
                    "width": "auto"
                }
            ],
            "right": [
                {
                    "name": "user"
                }
            ]
        },
        {
            "left": [
                {
                    "module": "powerline.segments.shell",
                    "name": "mode"
                },
                {
                    "name": "hostname"
                },
                {
                    "name": "user"
                },
                {
                    "name": "virtualenv"
                },
                {
                    "name": "cwd",
                    "args": {
                        "use_path_separator": true,
                        "ellipsis": "…",
                        "dir_limit_depth": 3
                    }
                },
                {
                    "module": "powerline.segments.shell",
                    "name": "jobnum"
                }
            ],
            "right": [
                {
                    "module": "powerline.segments.shell",
                    "name": "last_pipe_status"
                },
                {
                    "name": "branch"
                }
            ]
        }
    ]

----- BEGIN PGP SIGNED MESSAGE -----
ハッシュ:SHA512

2014年6月23日10:38:10 AMGMT + 03:00、[email protected]は次のように書いています。

「上」が特殊なケースである場合、セグメント自体を単に作成しないのはなぜですか
「左」および/または「右」を含むオブジェクトを含む配列? オブジェクトは
配列内の出現順に、からの個別の行としてレンダリングされます。
最初から最後まで。

あなたは上からこの問題を読むべきです、あなたの質問はすでに答えられました。

上記の例を使用すると:

   "segments": [
       {
           "left": [
               {
                   "name": "cwd"
               },
               {
                   "type": "string",
                   "highlight_group": "cwd",
                   "draw_soft_divider": false,
                   "draw_hard_divider": false,
                   "width": "auto"
               }
           ],
           "right": [
               {
                   "name": "user"
               }
           ]
       },
       {
           "left": [
               {
                   "module": "powerline.segments.shell",
                   "name": "mode"
               },
               {
                   "name": "hostname"
               },
               {
                   "name": "user"
               },
               {
                   "name": "virtualenv"
               },
               {
                   "name": "cwd",
                   "args": {
                       "use_path_separator": true,
                       "ellipsis": "…",
                       "dir_limit_depth": 3
                   }
               },
               {
                   "module": "powerline.segments.shell",
                   "name": "jobnum"
               }
           ],
           "right": [
               {
                   "module": "powerline.segments.shell",
                   "name": "last_pipe_status"
               },
               {
                   "name": "branch"
               }
           ]
       }
   ]

このメールに直接返信するか、GitHubで表示してください。
https://github.com/Lokaltog/powerline/issues/462#issuecomment -46810514

----- BEGIN PGP SIGNATURE -----
バージョン:APG v1.1.1

iQJNBAEBCgA3BQJTp9p + MBwfMDI7PjIgHTg6PjswOSAQOzU6QTA9NEA + MjhHIDxr
cC1wYXZAeWFuZGV4LnJ1PgAKCRBu + P2 / AXZZIr45EADM3dVGi1ryTRubE5c7SJmD
cvE4mSg / 4TXTRPQcfCUxcIYN9fq8tF7FRSx9lWa7C3SJ / RIF6mBm0z1wQopx9CHo
UbjrMAW23JEXsJRMVyg8Jzmk5YKrUJMBa1W507y3DMw + 6Vhm71Kw3yQKFsR / vNNG
6dW0dXpm22qXCSuT3aX + 6ACWLjuHbGVrLEhbG4AF + jrakrO9M / 6jbDPU97pkmh20
0TCcF177juhZ + ssaN2FZQ7NRGgdVg9VFw5eEisheQTVLiZ + YPUL3kF5k8PM + mEc /
gjLCGIdAEoAjGLbMx7DAqI4X1gJ57Z28vcLF4FzbOn2yCxhZg8X2gvG3TePx7vkd
3nWN67ct + FwnI5C5oIEF6vJuw1zBbMuyrizqHljXuHp3yRzUNBq3En6EnpkXnzXC
lY4pJ9 / nKmSFSY0cj6gh94qND3 / koWPoVmu4V0r3GFEzyWM1KtAo86dRUiIbG8BD
GjDucOqJrA // LrRavezhe4JXzH06z5cbZ3d0npydBd + E4USe / dxwNv8bbDdAnI2Q
5wiC1oXEUdEmXBz3HsSA6pQ + Kd2seOldAqZyz2oiJZB9Y + DoDaeyawAvRxNBS3xe
uBdLuAvjuo / XeSUxgue + wNcoWKtnNLJ4PVGJjMsFJwI6fOnRZZG1wAsuVzi77K2h
arcazcmqTjRAyel6sGuJtw ==
= 4r6h
-----PGP署名の終了-----

けっこうだ。

私は見て、見てきましたが、これを2行でどのように表示できるか、一生理解できません。
簡単な例を教えてください。

ありがとう。

このページは役に立ちましたか?
0 / 5 - 0 評価