GTK3にvteターミナルウィジェットを追加する方法


8

vteアプリケーションにウィジェットを追加しようとしていますが、.fork_command()そのウィジェットでコマンドを実行するために使用した例を見つけました。しかし、

http://developer.gnome.org/vte/0.26/VteTerminal.html#vte-terminal-fork-command

これは非推奨であり、使用することをお勧めしますfork_command_full()。8つの必須の引数が必要です。彼らは「デフォルト」という言葉を聞いていませんか?どういうわけか機能するラインを構築することができました:

pty_flags = vte.PtyFlags(0)
terminal.fork_command_full(pty_flags, "/home/int", ("/bin/bash", ), "", 0, None, None)

はい、私は列挙型について知っています、私がこれを完全に間違ってやっていて、はるかに簡単な方法があることを願っています。何でも知ってますか?

PS quicklyデフォルトのubuntu-applicationテンプレートで使用しています。

PPSインポート行は from gi.repository import Vte as vte


あなたはその長い列を何度も持っていますか、それとも一度だけですか?
RobotHumans 2012年

1
たった今一度だけですが、将来動的に追加したいと思っています。
int_ua

回答:


14

ここに基本的な例があります:

#!/usr/bin/env python

from gi.repository import Gtk, Vte
from gi.repository import GLib
import os

terminal     = Vte.Terminal()
terminal.spawn_sync(
    Vte.PtyFlags.DEFAULT,
    os.environ['HOME'],
    ["/bin/sh"],
    [],
    GLib.SpawnFlags.DO_NOT_REAP_CHILD,
    None,
    None,
    )

win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
win.add(terminal)
win.show_all()

Gtk.main()

端末で「exit」を送信するユーザーからどのようにキャッチ/処理/回復できますか?終了時に新しいvte端末を生成する必要がありますか?または、おそらくターミナル内に新しいシェルを生成するだけですか?さらに、vteターミナルを操作する方法、たとえばgtkボタンを押してbashを開く方法に関するドキュメントにリンクできますか?
ThorSummoner 2014

5

将来動的に追加したいというアドレスに対するADcompの回答に基づいて、Vte.terminalをサブクラス化することをお勧めします。

#!/usr/bin/env python

from gi.repository import Gtk, Vte
from gi.repository import GLib
import os

class MyTerm(Vte.Terminal):
    def __init__(self, *args, **kwds):
        super(MyTerm, self).__init__(*args, **kwds)
        self.spawn_sync(
            Vte.PtyFlags.DEFAULT,
            os.environ['HOME'],
            ["/bin/sh"],
            [],
            GLib.SpawnFlags.DO_NOT_REAP_CHILD,
            None,
            None,
            )

win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
bigbox = Gtk.Box()
win.add(bigbox)
bigbox.add(MyTerm())
bigbox.add(MyTerm())
win.show_all()

Gtk.main()

おかげで:) __init__(self, command)はもっといいでしょう、私はこれを後で試します。
int_ua

@int_ua-あなたがもっと欲しいものは?私はあなたが質問の文脈から用語を
埋め込も

4

VTE 0.38以降、vte_terminal_fork_command_full ()に名前が変更されましたvte_terminal_spawn_sync ()。したがって、新しいバージョンを使用している場合は、@ ADcompの回答を次ように変更する必要があります。

terminal.spawn_sync(
    Vte.PtyFlags.DEFAULT,
    os.environ['HOME'],
    ["/bin/sh"],
    [],
    GLib.SpawnFlags.DO_NOT_REAP_CHILD,
    None,
    None,
    )
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.