我有一个方便的类,我使用它可以轻松地将一组“汇总器”函数添加到 GDB 漂亮的打印机(例如,一个Rect类可以有一个 [ Area] 字段,由 Python 计算)。然后它也打印所有现有的孩子,所以你可以一次看到所有的东西。
class SummaryAndFieldIterator:
"""
Iterator to first go through a list of summariser functions,
then display all the fields in the object in order
"""
def __init__ (self, obj, summaries):
self.count = 0
self.obj = obj;
self.summaries = summaries;
self.keys = sorted(obj.type.iterkeys())
def __iter__(self):
return self
def __next__(self):
if (self.count >= len(self.keys) + len(self.summaries)):
raise StopIteration
elif self.count < len(self.summaries):
name, retVal = self.summaries[self.count](self.obj)
# FIXME: this doesn't seem to …Run Code Online (Sandbox Code Playgroud) 在试图清理约弃用一些警告Gtk.Widget.modify_base,Gtk.Widget.modify_font我发现了建议的替代物,override_background_color(和其等同为字体和颜色)也已过时.我现在正在尝试研究如何为小部件提供这些样式.
字体,颜色和背景用于自定义TextView窗口小部件,并且这些值的值作为某些首选项的一部分存储在某些字符串中,以便用户可以自定义几种不同的颜色.
对于字体和文本颜色,似乎最好的方法是Gtk.TextTag使用适当的样式创建s,并将insert()文本缓冲区的任何实例更改为insert_with_tags().TextBuffers和TextTags似乎没有"默认样式"概念.
但是,文本标签不会处理整个文本视图的背景.
建议的方法似乎是GtkStyleProvider,但我应该如何将这些用户指定的颜色提供给提供者?
很多例子像这样加载字符串常量:
string style = """
GtkButton {color:#ff00ea; font:Serif 12;}
GtkButton:hover {background-color:#3085a9;}
GtkLabel {background-color:#898989;}
GtkEntry {background-color:green; color:red;}
""";
CssProvider provider = new CssProvider();
provider.load_from_data(style,-1);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,每次配置更改时我都必须手动格式化并插入字符串到一大块CSS中,并将其反馈到样式中,这看起来非常混乱.我也不确定这些是否可以在加载后更改,因为似乎没有改变信号.
我想另一种方式是以某种方式继承GtkStyleProvider和实现我自己的,但这对于设置一些颜色似乎有些过分,并且似乎很少有文档.
大多数GTK +程序(甚至是GNOME的)似乎只是做它的"旧"的方式与modify_*和override_*而忽略了弃用,这是我不明白,如果那些使用CSS加载后可以改变它的少数.
这些只是两个选择吗?哪一个是"正确的"?
某些应用程序可以实时响应 GTK+ 主题更改。例如,Thunar、Geany、lxrandr、Hexchat 都会在主题更改时更新它们的 UI,例如在 lxappearance 中。这些都是 GTK+ 2 程序。
另一方面,到目前为止,我尝试过的所有 GTK+ 3 程序(包括 baobab、moserial gucharmap、ghex、pamac、evince、xreader)似乎无法重新加载主题,需要重新启动应用程序。
lxappearance(gtk2在我的系统上编译)正在发送一个 GTK+“信号”(不是 100% 在 GTK-land 中的术语)以导致应用程序重新加载:
// src/lxappearance.c line 198
static void reload_all_programs()
{
#if GTK_CHECK_VERSION(3, 0, 0)
/* TODO Port this to something else than gdk_event_send_clientmessage_toall */
#else
GdkEventClient event;
event.type = GDK_CLIENT_EVENT;
event.send_event = TRUE;
event.window = NULL;
if( app.use_lxsession )
{
event.message_type = gdk_atom_intern_static_string("_LXSESSION");
event.data.b[0] = 0; /* LXS_RELOAD */
}
else
{
/* if( icon_only )
event.message_type = …Run Code Online (Sandbox Code Playgroud) 我已经基于Wagerlabs代码(使用驱动程序用户客户机应用程序模型)为热插拔SCSI设备编写了设备驱动程序kext,并且一切正常。唯一剩下的担心是,驱动程序似乎没有被一致地释放,尤其是在应用程序崩溃的情况下。例如,当我尝试卸载kext时,即使在断开设备连接和关闭应用程序的情况下,仍然存在驱动程序和用户客户端的突出实例(驱动程序通常超过用户客户端)。
我已经登录了诸如之类的驱动程序功能free(),当我关闭计算机时,可以看到它们正在执行,因此这些实例显然仍可以终止。确保驱动程序实例终止并释放的“正确”方法是什么,即使主机应用程序崩溃,终止不当或通常不计划的事情?
我有一个 Git 预提交钩子,它会去除空格并将修改后的文件保留在工作副本中,这样它就不会踩踏像git add -p.
如果我提交多个已更改文件中的一个,并且更正了空格,则我会在工作副本中更改两个文件和一个暂存文件(该文件也在工作副本中,但暂存更改存在空格错误):
vi fileWithBadWS.txt # leave bad whitespace
vi fileWithGoodWS.txt # don't leave bad whitespace
vi unrelatedFile.txt
git add fileWithBadWS.txt fileWithGoodWS.txt
git commit -m "Commited files, one with bad whitespace" # pre-commit hook fails
Run Code Online (Sandbox Code Playgroud)
仓库现在看起来像这样:
On branch master
Changes to be committed:
modified: fileWithBadWS.txt # bad WS
modified: fileWithGoodWS.txt
Changes not staged for commit:
modified: fileWithBadWS.txt # fixed WS
modified: unrelatedFile.txt
Run Code Online (Sandbox Code Playgroud)
我可以用:
git diff去看fileWithBadWS.txt并且unrelatedFile.txtgit diff --cached查看暂存文件fileWithBadWS.txt和 …我有很多这样的行,由grep -n:
path/to/dir/file1.txt:4: Match
path/to/dir/file1.txt:40: Another Match
path/to/dir/file2.txt:2: Match
path/to/dir/file2.txt:564: Yet another Match
Run Code Online (Sandbox Code Playgroud)
我想消除行号小于(例如)10 的行。我知道我可以使用 轻松获得行号cut -d: -f2,但是你怎么能用它来丢弃这些行并继续将其余的输出输送到full 所以你最终得到:
path/to/dir/file1.txt:40: Another Match
path/to/dir/file2.txt:564: Yet another Match
Run Code Online (Sandbox Code Playgroud) 我正在考虑使用 Go 编写一个主要处理文本的小程序。根据我对 Go 和 Python 的了解,我非常确定 Go 会更快。我实际上并没有对疯狂速度的具体需求,但我想了解 Go。
“Go 将会变得更快”的想法得到了一个简单测试的支持:
# test.py
print("Hello world")
Run Code Online (Sandbox Code Playgroud)
$ time python dummy.py
Hello world
real 0m0.029s
user 0m0.019s
sys 0m0.010s
Run Code Online (Sandbox Code Playgroud)
$ time python dummy.py
Hello world
real 0m0.029s
user 0m0.019s
sys 0m0.010s
Run Code Online (Sandbox Code Playgroud)
// test.go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
Run Code Online (Sandbox Code Playgroud)
就原始启动速度而言看起来不错(这完全是预期的)。高度非科学的理由:
$ time ./test
hello world
real 0m0.001s
user 0m0.001s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
然而,我的下一个人为测试是 Go 在处理字符串时的速度有多快,我预计同样会被 Go 的原始速度所震惊。所以,这是令人惊讶的:
$ strace python test.py 2>&1 | wc -l
1223
$ strace …Run Code Online (Sandbox Code Playgroud)