小编Al *_*ger的帖子

如何对 Mutt 进行编程,使其在新电子邮件到达时采取行动?

Mutt 的配置变量中有一个选项beep_new,它会导致 Mutt 在新电子邮件到达时发出蜂鸣声。还有<shell_esc>command,它在内部shell中执行命令。有没有办法让 Mutt 在新电子邮件到达时执行某些用户定义的操作(shell 命令)?也许<pipe-message>可以帮忙?(可以<pipe-message>在配置文件中使用来调用 shell 命令。在运行 Mutt 时有没有办法做到这一点?)

编辑:根据 Glenn 的建议,可以通过在 .muttrc 文件中配置自定义状态格式来调用 Mutt 的脚本:

set status_format="/some/script.sh '%r %f (%L) |"
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用它来检测新电子邮件,因为“新邮件在...”通知出现在命令行上,而不是状态行中。如果电子邮件到达的邮箱不是当前邮箱,则状态行根本不会改变。

编辑2:好的,status_format 中的 %b 变量完成了这个任务。

linux shell mutt

6
推荐指数
1
解决办法
3931
查看次数

如何在 OpenGL 中为 std430 布局正确填充和对齐数据

在着色器存储对象中使用它时,我无法使以下结构起作用:

着色器中的定义:

struct Object
{
    vec4                color;
    mat3                transform;
    float               depth;
    float               pObjIndex;
    //float align1;
    //float align2;
};

layout (std430, binding = 0) buffer Objects
{
  Object objects[];
};
Run Code Online (Sandbox Code Playgroud)

我的理解是对象结构在 GLSL 中通过其最大成员 vec4 对齐,即通过 16 字节边界对齐。(mat3 被视为 vec3 的 3 元素数组,并按 12 字节边界对齐)。vec4、mat3 和 2 个浮点数给出 72 个字节。当我用两个浮点数将结构填充到最接近的 16 字节倍数 - 80 - 时,它无法正常工作,就像没有填充一样。

这个结构的布局的两个变体 - 填充有 2 个浮点数而没有任何填充 - 不正确吗?

c++ opengl glsl

5
推荐指数
1
解决办法
4276
查看次数

如何在Linux上创建支持替换/删除文件的存档?

如果其中包含一个包含数千个文件的压缩存档,那么从shell脚本中删除/替换文件的最佳方法是什么?

tar不支持替换存档中的文件,并且"解压缩和再压缩"方式替换大型存档中的单个文件似乎不是最佳方式.

xz似乎也不支持此选项.

7z也不适合此任务(7z的手册页不推荐使用它来压缩单个文件,仅用于压缩tar文件,因为存在保留文件所有者/组信息的问题).

pax也没有删除/替换存档中文件的选项.

在Linux上是否有一种从命令行创建此类存档的常用方法?

linux bash shell archive

5
推荐指数
1
解决办法
88
查看次数

如何通过ld将NASM程序链接到libc?

我有一个针对NASM的以下程序(ArchLinux i686)

SECTION .data
LC1: db "library call", 0

SECTION .text
extern exit
extern printf

;global main
;main:
global _start
_start:
push    LC1
call    printf

push    0
call    exit
Run Code Online (Sandbox Code Playgroud)

哪个是用命令组装的:

nasm -f elf libcall.asm
Run Code Online (Sandbox Code Playgroud)

如果用两行_start注释并取消注释两行main,则用命令汇编和链接:

gcc libcall.o -o libcall
Run Code Online (Sandbox Code Playgroud)

然后程序运行正常.但是如果用_start入口点组装代码并使用命令链接:

ld libcall.o -o libcall -lc
Run Code Online (Sandbox Code Playgroud)

然后在bash中启动程序(通过命令./libcall)后返回以下错误消息:

bash: ./libcall: No such file or directory
Run Code Online (Sandbox Code Playgroud)

虽然该libcall文件确实存在.objdump显示以下内容:

[al libcall ]$ objdump -d libcall

libcall:     file format elf32-i386


Disassembly of section .plt: …
Run Code Online (Sandbox Code Playgroud)

linux assembly nasm

5
推荐指数
1
解决办法
1099
查看次数

从GLSL中的数组初始化结构

假设我在着色器中有一个数组变量,在着色器存储块中声明:

layout(std430, binding = 2) buffer MyBuffer
{
  float lotsOfFloats[];
};
Run Code Online (Sandbox Code Playgroud)

和结构:

struct myStruct
{
 float f1;
 vec3 vf1;
}struct1;
Run Code Online (Sandbox Code Playgroud)

有没有办法使用缓冲区存储块中的数组中的值(在此示例中的lotsOfFloats数组中)在着色器中"快速"初始化此结构的对象?比方说,在C++中,可以将内存从数组复制到对象:

memcpy(&struct1, &lotsOfFloats[0], sizeof(myStruct) );
Run Code Online (Sandbox Code Playgroud)

或者可以通过赋值将数组值字节复制到对象:

struct1 = *(myStruct*)&lotsOfFloats[0];
Run Code Online (Sandbox Code Playgroud)

GLSL中有类似的方法吗?例如,将在GLSL中使用第二种方式(字节复制分配)吗?

c c++ opengl glsl

2
推荐指数
1
解决办法
1265
查看次数

如何在带有std库的Linux上将utf-16转换为utf-32?

在MSVC 上将 utf-16转换为utf-32非常简单 - 使用C11的codecvt_utf16语言环境方面.但是在GCC(gcc(Debian 4.7.2-5)4.7.2)中,这个新功能似乎还没有实现.有没有办法在没有iconv的情况下在Linux上执行这种转换(最好使用std库的转换工具)?

c++ gcc utf-16

2
推荐指数
1
解决办法
3721
查看次数

C# 套接字:异步套接字中的同步调用

在使用异步套接字的 MSDN示例中,套接字中的接收数据是通过从 BeginReceive 调用的回调处理程序中重复调用异步 BeginReceive 来完成的:

private static void ReceiveCallback( IAsyncResult ar ) {
//...Skipped...
        if (bytesRead > 0) {
            // There might be more data, so store the data received so far.
            state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead));
                //  Get the rest of the data.
            client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
                new AsyncCallback(ReceiveCallback), state);
        } else {
// ...Skipped...
}
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/bbx2eya8(v=vs.110).aspx

是否有必要从已经在单独线程中执行的处理程序再次进行异步调用?可以简单地在此处理程序中循环使用 Receive 吗?就像是:

while (bytesRead) {

bytesRead = client.Receive(state.buffer, 0, client.Available, 
                                   SocketFlags.None);
// Etc...
}
Run Code Online (Sandbox Code Playgroud)

c# sockets multithreading asynchronous

2
推荐指数
1
解决办法
2171
查看次数

此代码中的内容导致C#中的内存泄漏?

在Windows任务管理器中,我发现我的程序的内存使用量在运行时会随着时间的推移而增加.内存泄漏是由下面的代码引起的.代码是循环迭代图像列表并根据MSDN中的代码示例调整它们的大小.似乎管理所有资源并使用.Dispose()释放.

foreach ( string file in files )
{
    image = Image.FromFile( file );

    Rectangle cropRect = new Rectangle( 0, 0, 1000, 1000 );
    Bitmap src = ( Bitmap ) image;
    Bitmap target = new Bitmap( cropRect.Width, cropRect.Height );

    using ( Graphics g = Graphics.FromImage( target ) )  
    {
        g.DrawImage( src, new Rectangle( 0, 0, target.Width, target.Height ),
                                        cropRect,
                                        GraphicsUnit.Pixel );
    }

    image.Dispose();
    image = Image.FromHbitmap( target.GetHbitmap() );
    src.Dispose();
    target.Dispose();
    image.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

有人可以建议请问这段代码中内存泄漏的原因是什么?

c# memory-leaks

2
推荐指数
1
解决办法
94
查看次数

在Vim选项卡中,文件名的完成不起作用

当我尝试在Vim(Linux)中打开文件进行编辑时,当我按TAB时,Vim仅使用当前目录中的文件名自动填充文件名.但是,在网上搜索过,我认为从版本7开始,Vim应该使用搜索路径中所有目录中的文件名来支持类似bash的文件名自动完成.

比如,file1目录中有一个文件dir1(该目录也在环境变量PATH中).

我在Vim中键入以下命令:

set path=/dir1
set wildmode=list:longest
Run Code Online (Sandbox Code Playgroud)

然后,当我输入:

:e fil<TAB>
Run Code Online (Sandbox Code Playgroud)

文件名不是自动填充.如何在Vim中启用此功能?

vim autocomplete

1
推荐指数
1
解决办法
2919
查看次数

如何读取古代编码的文本文件?

有一个名为 Moby 的公共项目,其中包含多个单词列表。一些文件包含欧洲字母符号,并且是在 Unicode 之前创建的。自述文件,日期为 1993 年,内容如下:

“英语中常用的外来词通常都包含变音符号,例如锐音 e 用 ASCII 142 表示。”

维基百科说最后一个 ASCII 符号的编号是 127。

例如,此文件:http://www.gutenberg.org/files/3203/files/mobypos.txt包含我无法在任何各种拉丁编码中读取的符号。(在以 B 开头的单词部分的最后,C 字母之前,有很多这样的符号。)

有人可以建议应该使用什么编码来读取此文件,或者如何将其转换为某种可读的现代编码?

character-encoding

0
推荐指数
1
解决办法
127
查看次数