我想获得整个x11显示器的顶部/左侧像素(0; 0)的RGB值.
到目前为止我得到了什么:
XColor c;
Display *d = XOpenDisplay((char *) NULL);
XImage *image;
image = XGetImage (d, RootWindow (d, DefaultScreen (d)), x, y, 1, 1, AllPlanes, XYPixmap);
c->pixel = XGetPixel (image, 0, 0);
XFree (image);
XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), c);
cout << c.red << " " << c.green << " " << c.blue << "\n";
Run Code Online (Sandbox Code Playgroud)
但我需要这些价值观,0..255或者(0.00)..(1.00),虽然它们看起来像0..57825,但我认识的格式不是.
另外,复制整个屏幕只是为了得到一个像素是非常慢的.因为这将用于速度关键的环境,如果有人知道更高效的方式,我会很感激.也许使用XGetSubImage1x1大小,但我在x11开发时非常糟糕,并且不知道如何实现它.
我该怎么办?
我需要将任何行(来自 user_input)读入原子列表,例如:
Example line, which contains any ASCII chars.
Run Code Online (Sandbox Code Playgroud)
进入:
[Example,'line,',which,contains,any,ASCII,'chars.']
Run Code Online (Sandbox Code Playgroud)
到目前为止我所得到的:
read_line_to_codes(user_input, Input),
atom_codes(IA,Input),
atomic_list_concat(AlistI,' ',IA).
Run Code Online (Sandbox Code Playgroud)
但这仅适用于单个单词,因为 atom_codes。read/2 也抱怨空格,所以有什么办法可以做到这一点吗?
哦,然后可能以逗号分割成二维列表,附加点/感叹号/问号,例如:
[[Example,line],[which,contains,any,ASCII,chars],'.']
Run Code Online (Sandbox Code Playgroud)
顺便说一句:那是 SWI 序言。
编辑:找到解决方案:
read_line_to_codes(user_input, Input),
string_to_atom(Input,IA),
atomic_list_concat(AlistI,' ',IA),
Run Code Online (Sandbox Code Playgroud)
无法回答我自己的问题,因为我没有 100 声望:-/
是否可以使用 CSS 的“内容”属性(在 :before/:after 伪元素中)用标签名称实际标记一个块?像attr(...),但用于标记而不是其属性。
伪CSS:
body *:before{
content: tagname;
color: red;
}
Run Code Online (Sandbox Code Playgroud)
应该在页面中的所有元素前面加上用红色书写的标签名称。
我有一个使用 luasocket 的 udp 客户端,基本上是这样做的(有几个抽象层,但这就是那里发生的事情):
s=socket.udp()
s:setsockname("*",0)
s:setpeername(socket.dns.toip("example.com"),64299)
s:settimeout(0)
s:send(...)
s:settimeout(10)
msg,err=s:receive()
s:settimeout(0)
print(msg,err)
Run Code Online (Sandbox Code Playgroud)
虽然在服务器的调试输出中看到一切正常(ssh 到远程主机),但我在客户端中收到“超时”错误。
当使用客户端wireshark检查所有内容时,我看到客户端发送的数据包,以及来自服务器的响应数据包(正确的端口和所有内容),以及从我的客户端主机发送到服务器的ICMP“端口不可达”数据包,以响应这是(正确的)回应。
那里发生了什么事?我尝试了所有方法,包括将 iptables 重置为“接受所有内容”,但我的客户端仍然发送“端口无法访问”。
相关数据包是:
From To Len Description
192.168.2.100 95.143.172.171 UDP 61 Source port: 45025 Destination port: 64299
000e8f11e7000025229835a908004500002f4008400040112b6fc0a802645f8facabafe1fb2b001b28d794d2000ec8360100aa81a477616e74a3756964
95.143.172.171 192.168.2.100 UDP 60 Source port: 64299 Destination port: 45025
0025229835a9000e8f11e70008004500002b000040003911727b5f8facabc0a80264fb2bafe100172e8d94d2000e0ea10100a681a3756964ff000000
192.168.2.100 95.143.172.171 ICMP 85 Destination unreachable (Port unreachable)
000e8f11e7000025229835a9080045c00047061d00004001a492c0a802645f8facab0303cc6c000000004500002b000040003911727b5f8facabc0a80264fb2bafe100172e8d94d2000e0ea10100a681a3756964ff
Run Code Online (Sandbox Code Playgroud)
防火墙,以防万一它很重要(我认为这并不重要,因为 iptables 在发生这种情况时不会增加任何 INPUT 数据包计数器):
$ sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo …Run Code Online (Sandbox Code Playgroud) 我想编写一个 x11 终端模拟器,但我不知道我应该如何生成并与 shell 通信,是否有任何基本的(伪或 C)代码?比如要创建什么样的 PTY,如何将 shell 绑定到它,我必须捕捉或发送什么信号,等等。并不是真的想对整个 xterm 源进行排序。
编辑:哦,我想实现一种与其中的任何应用程序进行通信的方式,我该如何进行功能发现?“客户端”中有一些隐藏的ansi序列,希望它不会与其他终端模拟器冲突?一些环境变量,希望它不会与“客户端”发生冲突或被 shell 删除?
我想增加/减少 astd::variant的类型替代,基本上像这样:
using var_t = std::variant</*...*/>;
var_t var;
var.emplace< (var.index()+1) % std::variant_size<var_t> >(); // "increment" case, wrapping for good measure
Run Code Online (Sandbox Code Playgroud)
这里的问题是,虽然emplace期望 clang 的错误消息称为“显式指定的参数”,index但似乎不是constexpr.
明显的替代方案是这样的:
switch(var.index()){
0:
var.emplace<1>();
break;
1:
var.emplace<2>();
break;
// ...
variant_size<var_t>-1:
var.emplace<0>();
}
Run Code Online (Sandbox Code Playgroud)
但这就是我个人所说的“极其丑陋”和“维护背后的巨大痛苦”(特别是因为我必须维护这些块的两个几乎副本,以进行递增和递减)。
有没有更好/“正确”的方法来做到这一点?
如果该信息在任何方面都很重要,我的目标C++20是.clanglibstdc++
Afaik NULL可以(或者实际上,至少在我的stdlib实现中)#define'd as:
#define NULL ((void*)0)
Run Code Online (Sandbox Code Playgroud)
此外,/sf/answers/64727841/声明在C++中NULL是透明地转换为/从((int)0)(这是std::nullptr在C++中使用的原因,因为它有一个真正的nil类型/值对,由于nullptr_topaque typedef).
所以,我目前正在开发一个LuaJIT库,并希望提供一个辅助函数来检查值nil/ NULL/不管(=价值意义 nil,但也许不是类型nil).
目前,那是:
function ffi.nil(value)
return value==nil or value==ffi.NULL
end
Run Code Online (Sandbox Code Playgroud)
但是,在我的系统中(NULL==0)通过此片段打印验证,在C中是真的,这是正确的true:
#include <stdio.h>
#include <stdlib.h>
void main(void){
if(NULL==0)
printf("true\n");
else
printf("false\n");
}
Run Code Online (Sandbox Code Playgroud)
那么我应该去寻找" nil意义价值"的定义吗?
function ffi.nil(value)
return value==nil or value==ffi.NULL or value==0
end
Run Code Online (Sandbox Code Playgroud)
TL; DR:在C中,NULL等于0,而在LuaJIT的FFI中,没有两对nil, ffi.NULL, 0相等; 因此,在定义nil …