小编MJD*_*MJD的帖子

为什么git-describe使用字母'g'为提交ID添加前缀?

典型的输出git-describe看起来像

some-tag-32-gf31f980
Run Code Online (Sandbox Code Playgroud)

where some-tag标记名称,32表示在使用该标记提交后所描述的提交是32次提交,并且gf31f980意味着提交ID被唯一缩写为f31f980.

我的问题是关于ggf31f980.为什么会这样?我的第一个想法是插入它来消除对输出的解析git-describe.但我无法想到它实际上有助于它的任何情况.例如,32组件可能被省略,并且无法知道上面的输出描述了在标签之后提交的提交32 some-tag,而不是标记的提交some-tag-32.但这g并没有帮助.

只提取提交ID的正则表达式匹配可以搜索/-g([0-9a-f]+)$/.没有简单的方法来简化这一点; /-g(.*)$/例如,你不能这样做,因为它可能错误地匹配g标签名称中的a.没有g你仍然可以做/-([0-9a-f]+)$/,所以这g并没有帮助你.非正则表达式解析过程的行为类似.

g是明确生成的; 相关的源代码(约240行builtin/describe.c)是:

static void show_suffix(int depth, const unsigned char *sha1)
{
        printf("-%d-g%s", depth, find_unique_abbrev(sha1, abbrev));
}
Run Code Online (Sandbox Code Playgroud)

搜索有关此信息的信息很难,因为相关术语g是一个禁用词.

有什么g用?

git

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

用于编辑文件的Emacs模式,其中缩进意味着结构

我想在Emacs中编辑一个很大的毛茸茸的YAML文件.压缩隐含文件结构:如果行A缩进十个空格,则A开始一个包含每个后续行的段,该行由十个以上的空格缩进.这是一个相当常见的约定,远远超出YAML.

我真正想要的是一个emacs模式,它具有尊重这种结构的定义.例如:

  • 我想forward-sexp跳过一个性别,其中通过缩进而不是通过匹配括号来暗示性别.同样,我希望有其他导航命令移动到当前部分结束后的行,到当前部分的下一个兄弟部分,依此类推.
  • 我希望有一个命令来折叠当前部分,或除了当前部分之外的所有部分,类似于outline-mode可以折叠当前轮廓部分的方式,但是缩进定义了部分.
  • 我希望模式行能够显示有关我所在部分的有用信息,如缩进所暗示的那样.
  • 我希望有一个选项可以自动突出显示当前行的祖先所有行.
  • 其他我没有想过的事情.

我看过了yaml-mode,但它没有做任何有用的事情.有几个人建议我尝试Python模式,但它不能很好地用于此目的.

一般的缩进行模式似乎是很久以前有人会写的东西,但如果它存在,我找不到它.或者也许有一些方法来破解outline-mode我想要的方式?

谢谢你的任何建议.

emacs indentation

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

从.git/config中删除设置时如何避免空白部分?

如果我这样做git config foo.bar baz,这会添加一个foo部分.git/config:

...
[foo]
        bar = baz
...
Run Code Online (Sandbox Code Playgroud)

我可以再次删除该设置git config --unset foo.bar,但该部分保留在文件中,其中没有任何内容:

...
[foo]
...
Run Code Online (Sandbox Code Playgroud)

如果我添加其他foo设置git config foo.bar baz,git-config则不将其添加到空白foo部分; 它开始一个新的:

...
[foo]
[foo]
        bar = baz
...
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这是预期的行为吗?
  2. 如果没有,这是一个错误吗?
  3. 有什么方法可以在取消配置时避免配置文件中空节的可能增加?

git configuration-files

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

如何通过脚本控制 KDE 监视器配置?

每天早上我来上班,将正在睡觉的笔记本电脑插入办公桌上的大显示器,然后摆弄这个对话框:

\n\n

KDE“显示设置”对话框的屏幕截图

\n\n

我想这种摆弄的结果是“显示设置”应用程序将新的显示器配置写入某个文件,然后向窗口管理器发送一些信号以注意到设置已更改。我想自己做这件事并直接控制它,为此目的以及其他目的。

\n\n

如果我能找到生成 \xe2\x80\x98Display Settings\xe2\x80\x99 对话框的进程的名称,我可以运行它并strace查看它在做什么,但我还没有找到要么出去。

\n\n

我的问题是:

\n\n
\n

该对话框属于哪个程序?我会在输出中寻找什么ps来识别它?当它更改监视器配置时,它实际上在做什么?

\n
\n

scripting configuration multiple-monitors kde-plasma

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

如何查询当前的 GHCi 环境?

我想生成这个图的修订版,它出现在 Haskell98 标准中:

在此处输入图片说明

在 2019 年,我将通过生成我想要的图的描述并将其提供给 Graphviz 来做到这一点。我昨天做的一个概念验证实现,只告诉有一个叫做 的东西Monad,可以自动生成这个图:

在此处输入图片说明

概念验证程序相当糟糕,因为它遍历图形的方式是:info向 GHCi发送命令并尝试解析输出。我对进一步推动这种方法不感兴趣。

正确的做法是弄清楚 GHC 在内部如何表示类和实例信息,然后使用其 API 直接查询这些数据结构。

我花了相当多的时间在GHC API 文档中四处寻找,但我还没有找到我需要的入口点。

我想我想向 GHC 索取当前范围内所有类型类和实例信息的名称列表,以及对每个类型的约束的描述。

有什么好的方法来处理这个问题?我应该去哪里找?

谢谢。

reflection haskell ghc ghci

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