如何在 sublime 或 terminology 中从笔记本中的孩子那里获得预览
How to get preview from childs in notebook like in sublime or terminology
例如,我有一个 window 和一个笔记本小部件,在这个笔记本中我有两个选项卡,每个选项卡包含一个 vte 小部件
预览每个 vte 小部件的想法(你知道就像在术语中一样)这里是我到目前为止的简单代码:
import gi
import os
gi.require_version('Gtk', '3.0')
gi.require_version('Vte', '2.91')
from gi.repository import Gtk
from gi.repository import Vte
from gi.repository import GLib
from gi.repository import Gdk
from gi.repository import GdkPixbuf
win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
notebook = Gtk.Notebook()
win.add(notebook)
directory = os.environ['HOME']
env=[]
term1 = Vte.Terminal()
term1.spawn_sync( Vte.PtyFlags.DEFAULT, directory, ["/bin/bash"],
env, GLib.SpawnFlags.CHILD_INHERITS_STDIN | GLib.SpawnFlags.SEARCH_PATH,
None, None, )
term1.show()
term2 = Vte.Terminal()
term2.spawn_sync( Vte.PtyFlags.DEFAULT, directory, ["/bin/bash"],
env, GLib.SpawnFlags.CHILD_INHERITS_STDIN | GLib.SpawnFlags.SEARCH_PATH,
None, None, )
term2.show()
notebook.append_page(term1)
notebook.append_page(term2)
notebook.show()
notebook.next_page()
def manage_key_press_events_cb(widget, event):
keyval = event.keyval
if ((event.state & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)) == (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)):
if keyval == Gdk.KEY_O:
for i in range(notebook.get_n_pages()):
child = notebook.get_nth_page(i)
child.get_window().show()
width = child.get_allocation().width
height = child.get_allocation().height
x = child.translate_coordinates(notebook,0,0)[0]
y = child.translate_coordinates(notebook,0,0)[1]
p = Gdk.pixbuf_get_from_window(child.get_window(), 0, 0, width, height)
p.savev(str(i) + ".png", "png", (), ())
return True
else:
return False
else:
return False
win.show_all()
win.connect('key-press-event', manage_key_press_events_cb)
Gtk.main()
我在一个选项卡中启动 htop,在另一个选项卡中启动 glances(应用程序无关紧要,它们只是帮助我区分预览)
我无法解决的问题是每个预览代表当前获得焦点的选项卡。无论我做什么,我都无法预览
不是当前选项卡。
仅供参考,我使用 python 是为了给您一个简单的工作示例,但最初我遇到了来自 ruby-gnome2 项目的 ruby 的问题。所以我想这与 python 或 ruby.
无关
GtkNotebook 实现不允许直接 show/hide/draw 它的 child。为了获得 child 的 pixbuf,它必须是当前选中的。
所以想法是循环遍历笔记本的所有 childs 并使用 "switch-page" 事件来生成 pixbuf:
看这里:
http://www.gtkforums.com/viewtopic.php?f=3&t=179132
这里
https://github.com/cedlemo/germinal
https://github.com/cedlemo/germinal/blob/master/bin/terminal_chooser.rb
https://github.com/cedlemo/germinal/blob/master/bin/notebook.rb
例如,我有一个 window 和一个笔记本小部件,在这个笔记本中我有两个选项卡,每个选项卡包含一个 vte 小部件 预览每个 vte 小部件的想法(你知道就像在术语中一样)这里是我到目前为止的简单代码:
import gi
import os
gi.require_version('Gtk', '3.0')
gi.require_version('Vte', '2.91')
from gi.repository import Gtk
from gi.repository import Vte
from gi.repository import GLib
from gi.repository import Gdk
from gi.repository import GdkPixbuf
win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
notebook = Gtk.Notebook()
win.add(notebook)
directory = os.environ['HOME']
env=[]
term1 = Vte.Terminal()
term1.spawn_sync( Vte.PtyFlags.DEFAULT, directory, ["/bin/bash"],
env, GLib.SpawnFlags.CHILD_INHERITS_STDIN | GLib.SpawnFlags.SEARCH_PATH,
None, None, )
term1.show()
term2 = Vte.Terminal()
term2.spawn_sync( Vte.PtyFlags.DEFAULT, directory, ["/bin/bash"],
env, GLib.SpawnFlags.CHILD_INHERITS_STDIN | GLib.SpawnFlags.SEARCH_PATH,
None, None, )
term2.show()
notebook.append_page(term1)
notebook.append_page(term2)
notebook.show()
notebook.next_page()
def manage_key_press_events_cb(widget, event):
keyval = event.keyval
if ((event.state & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)) == (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)):
if keyval == Gdk.KEY_O:
for i in range(notebook.get_n_pages()):
child = notebook.get_nth_page(i)
child.get_window().show()
width = child.get_allocation().width
height = child.get_allocation().height
x = child.translate_coordinates(notebook,0,0)[0]
y = child.translate_coordinates(notebook,0,0)[1]
p = Gdk.pixbuf_get_from_window(child.get_window(), 0, 0, width, height)
p.savev(str(i) + ".png", "png", (), ())
return True
else:
return False
else:
return False
win.show_all()
win.connect('key-press-event', manage_key_press_events_cb)
Gtk.main()
我在一个选项卡中启动 htop,在另一个选项卡中启动 glances(应用程序无关紧要,它们只是帮助我区分预览)
我无法解决的问题是每个预览代表当前获得焦点的选项卡。无论我做什么,我都无法预览 不是当前选项卡。
仅供参考,我使用 python 是为了给您一个简单的工作示例,但最初我遇到了来自 ruby-gnome2 项目的 ruby 的问题。所以我想这与 python 或 ruby.
无关GtkNotebook 实现不允许直接 show/hide/draw 它的 child。为了获得 child 的 pixbuf,它必须是当前选中的。
所以想法是循环遍历笔记本的所有 childs 并使用 "switch-page" 事件来生成 pixbuf: 看这里:
http://www.gtkforums.com/viewtopic.php?f=3&t=179132
这里
https://github.com/cedlemo/germinal
https://github.com/cedlemo/germinal/blob/master/bin/terminal_chooser.rb
https://github.com/cedlemo/germinal/blob/master/bin/notebook.rb