小编Rya*_*yan的帖子

hg log只能显示给定修订版的祖先吗?

我真的很想念从svn转变为mercurial的一件事是mercurial的hg log命令坚持要显示所有历史记录,而不仅仅是我当前工作修订版的历史记录.

例如,我正在为我的分支机构中的另一个负责人处理一个包含大量签到的仓库,前20个日志条目与我的开发线无关.

hg日志有很多选项,但是......
--rev显示要求的修订而不是它的祖先 -
分支不起作用,因为活动头与我的同一分支
--prune删除了所有的祖先另一个脑袋,即使他们也是我的祖先 -
用户不起作用,因为我不是这个开发线的唯一用户

我想我可能会脱衣服,但这似乎有点过分了......

思考?
瑞安

mercurial

16
推荐指数
2
解决办法
6212
查看次数

Emacs,unicode,xterm鼠标转义序列和宽终端

简短版本:当使用emacs的xterm-mouse-mode时,Somebody(emacs?bash?xterm?)拦截xterm的控制序列并用\ 0替换它们.这是宽屏显示器的痛苦,因为只有前223列有鼠标.

罪魁祸首是什么,我该如何解决?

据我所知,这与Unicode/UTF-8支持有关,因为5 - 6年前我上次使用大显示器时不是问题.

血腥细节如下......

谢谢!

Emacs xterm-mouse-mode有一个众所周知的弱点,处理从x = 95开始的鼠标点击.最近版本的emacs采用的解决方法将问题推迟到x = 223.

几年前,我发现xterm以7位八位字节编码位置.给定位置'x'进行编码,X = x-96,发送:

\40+x (x < 96)  
\300+X/64 \200+X%64 (otherwise)  
Run Code Online (Sandbox Code Playgroud)

我们必须从emacs中添加一个给定的x位置,因为xterm中的位置从1开始,而不是零.因此,魔术x = 95数字会弹出,因为它被编码为"\ 300\200" - 第一个转义的数字.有人(emacs?bash?xterm?)对待那些来自ISO 2022的 "C0"控制序列.从x = 159开始,我们改为"C1"序列(\ 301\200),它们也是ISO 2022的一部分.

使用\ 302序列遇到问题,这与当前的x = 223限制相对应.几年前,我能够扩展黑客手动拦截\ 302和\ 303序列,从而解决了这个问题.快进几年,今天我发现我被困在x = 223,因为有人用\ 0取代了这些序列.

所以,我期望点击第1行,第250列来制作

ESC [ M SPC \303\207 ! ESC [ M # \303\207 !
Run Code Online (Sandbox Code Playgroud)

相反,emacs报告(对于任何col> 223)

ESC [ M SPC C-@ ! ESC [ M # C-@ !
Run Code Online (Sandbox Code Playgroud)

我怀疑Unicode/UTF-8支持是罪魁祸首.一些挖掘表明,Unicode标准允许C0和C1序列作为UTF-8的一部分,直到2000年11月,我猜有人没有得到备忘录(幸运的是).但是,\ 302\200 - …

unicode emacs mouse xterm utf-8

13
推荐指数
2
解决办法
2961
查看次数

如何为模板类中定义的类定义朋友

假设我有以下模板类来定义嵌套类:

template <typename T>
struct foo {
    struct bar { };
};
Run Code Online (Sandbox Code Playgroud)

假设我编写的环境也有以下帮助器类,它应该专门用于需要特殊处理的任何类型:

template <typename T>
struct maybeChangeType { using type = T; }  /* default: same type */
Run Code Online (Sandbox Code Playgroud)

我怎么能专门maybeChangeTypefoo<T>::bar?比如说,它很容易专门用于,foo<int>::barfoo将会使用100多个不同的,T所以这不是一个真正的选择.

注意:在将此问题标记为重复之前,请仔细阅读.这个问题并不是要问如何专注于一般(例如,在c ++中理解模板),或如何声明朋友,甚至如何声明模板的朋友.它询问如何为模板类的非模板嵌套成员声明朋友(如标题所述).

尝试以"正常"方式定义专业化不起作用,因为foo<T>::bar它不是可推导的上下文(坏符号:它需要typename在前面):

/* error: template parameters not deducible in partial specialization */
template <typename T>
struct maybeChangeType<typename foo<T>::bar>;
Run Code Online (Sandbox Code Playgroud)

将专业化声明为朋友也会产生编译错误:

template <typename T>
struct foo {
    struct bar {
        /* errors:
         * …
Run Code Online (Sandbox Code Playgroud)

c++ templates friend inner-classes template-specialization

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

从"覆盖"它的C++模板专业化调用"基础"模板函数?

问题:

有没有办法从C++中的专用模板函数调用"基本"模板函数,子类在覆盖它们时可以访问父类虚拟方法的方式?(注意:我怀疑答案是"不"但是会喜欢错误)

上下文:

我经常发现自己专门设计模板功能只是因为特殊情况需要额外的预处理或后处理,而不是因为代码的"胆量"已经改变.

举一个人为的例子:

通过继承,您可以执行以下操作:

struct base { 
    virtual void go() { printf("%p", this); }
};
struct foo : base { 
    virtual void go() { printf("this foo lives at "); base::go(); } 
};
Run Code Online (Sandbox Code Playgroud)

...并且调用foo :: go()将打印"this foo生活在<address>"

但是,使用模板:

template <typename T>
void go(T const &t) { printf("%p\n", &t); }

template <>
void go(foo const &f) { 
    printf("this foo lives at "); 
    ??? how to access "base" template ??? 
}
Run Code Online (Sandbox Code Playgroud)

你可以通过分解一堆小辅助函数并专门化它们而不是你真正关心的函数来以一种丑陋的方式解决这个问题:

template <typename T>
void _go_pre(T const &t) { /* …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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