假设bash配置了以下别名:
alias up="git --git-dir /path/to/backup/.git"
而那个特定的存储库 - 只有该存储库 - 具有以下git别名:
[alias]
backup = commit --allow-empty-message
Run Code Online (Sandbox Code Playgroud)
怎么能up自动完成backup?
这自动完成backup但不是up:
cd /a/different/dir
git --git-dir=/path/to/backup/.git ba
Run Code Online (Sandbox Code Playgroud)
这是up使用标准git命令自动完成但不是backup:
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main up
编辑:Etan是对的,完成功能需要查看扩展的别名,所以我创建了以下内容:
CompletableAlias() {
if (($#<2)); then
return 1
fi
source_c="$1"
target_c="$2"
target_a=( "${@:2}" )
target_s="${target_a[*]}"
alias "${source_c}=${target_s}"
completion_modifier="__${source_c}_completion"
completion_original="$( complete -p "$target_c" 2>/dev/null |
sed 's/.*-F\W\+\(\w\+\).*/\1/'
)"
if [[ -n "$completion_original" ]]; then
read …Run Code Online (Sandbox Code Playgroud) 是否有可能为打开的文件划分python函数,并区分它们是否由python或子进程打开?
read_python, read_external = [], []
@strace_read(read_python, read_external)
function test():
file = open("foo.txt", "r")
subprocess.call(["cat", "bar.txt"])
for file in read_python:
print("python: ", file)
for file in read_external:
print("external: ", file)
Run Code Online (Sandbox Code Playgroud)
所以输出如下:
>>> python: foo.txt
>>> external: bar.txt
Run Code Online (Sandbox Code Playgroud)
我最感兴趣的是使用装饰器.区分不是优先事项.
从概念上讲,我最好的猜测是load_function(open)用包装器替换实例......实际上,我不知道,有太多的方法可以访问open.
我正在修改一个与Automake / libtool文档提供的示例非常相似的项目。摘录:
顶级configure.ac:
LT_INIT
Run Code Online (Sandbox Code Playgroud)
顶级 Makefile.am:
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src doc
Run Code Online (Sandbox Code Playgroud)
./src 生成文件.am:
lib_LTLIBRARIES = libname.la
libname_la_SOURCES = <my cc file list>
libname_la_LDFLAGS = -no-undefined -version-info $(GENERIC_LIBRARY_VERSION)
include_HEADERS = <my h file list>
bin_PROGRAMS = progname
progname_SOURCES = <my cc file list>
progname_LDADD = libname.la
progname_LDFLAGS = -static
Run Code Online (Sandbox Code Playgroud)
在我的包创建软件提供的fakeroot环境中,我执行以下命令
$ autogen.sh # contains the usual calls to aclocal, libtoolize, automake, autoconf.
$ ./configure --prefix="/usr" --disable-static
$ make
...
/bin/sh ../libtool --tag=CXX --mode=link g++ -Wall …Run Code Online (Sandbox Code Playgroud) 到目前为止,我发现了两种方法:
对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),列出每个直接子窗口。递归地搜索每个直接子节点以查找具有该WM_STATE属性的窗口;该窗口成为直接子级的顶级应用程序窗口,所有递归都可以停止。如果直接子级的层次结构中没有窗口具有该WM_STATE属性,则假定直接子级本身就是顶级应用程序窗口。
使用xcb_get_property, and xcb_query_tree(尽管名称仅列出直系孩子)。
这就是xlsclients使用的,通过 XCB(与上面相同的算法,或多或少)。
要求:需要 ICCCM(窗口管理器)支持WM_STATE.
对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),获取“_NET_CLIENT_LIST”属性,该属性列出了窗口管理器管理的所有顶级应用程序窗口。
使用xcb_get_property.
这是wmctrl通过 Xlib 使用的。
需要窗口管理器来维护列表。一些窗口似乎逃脱了列表。
要求:EWMH(窗口管理器)支持_NET_CLIENT_LIST或_WIN_CLIENT_LIST(我不知道第二个是什么;我找不到任何文档)。
问题:
还有其他方法吗?是否有任何方法不依赖于外部机制,例如 ICCCM 或 EWMH?
哪种方法最有弹性?
_NET_CLIENT_LIST. 为什么是这样?WM_STATE级是顶级应用程序窗口,那么是否会匹配无窗口应用程序?更糟糕的是,它不会在虚拟根窗口下严重崩溃吗?例如,虚拟根窗口成为唯一的直接子窗口,递归将在第一个应用程序窗口上停止WM_STATE;只会匹配一个窗口。针对这种可能性,xlsclients不包括对虚拟根窗口的任何检查……那么为什么它可以与 GNOME(使用虚拟根窗口)一起使用?是否有可能read以
从常规文件读取时,不包括:
read(3)建议除上述条件外,从常规文件中读取数据时,read返回的字节数永远不会少于请求的字节数。
如果文件中剩余的字节数小于nbyte,read()请求被信号中断,或者文件是管道或FIFO或特殊文件且小于,则返回的值可能小于nbyte。 nbyte个字节立即可供读取。
但是,此答案提出了一个假设,即read如果内核希望优先处理其他I / O ,则返回的字节数可能会少于所请求的字节数。尽管是假设的,但要点是,在任何条件下都无法读取预期返回的数据与请求的数据一样多。因此,即使以上三个条件(SSIZE_MAX,EOF,中断)不适用,也不能read在不检查返回值的情况下在常规文件上使用,这是绝对不安全的:
// all blockable signals have been ignored
// 10 is guaranteed less than SSIZE_MAX
// file size is known, access is locked
if (read(fd_of_big_reg_file_with_zero_offset, buf, 10) < 0) {
// so all we have to do is handle errors
}
Run Code Online (Sandbox Code Playgroud)
此外,我从未经历过对常规文件的读取以进行阻止,但是我假设在发生可恢复的I / O错误(例如需要多次重读的坏块)的情况下,这是有可能的。
注意:这是对“什么进程创建了这个 X11 窗口?”的回答的延续。来自 unix.stackexchange。该答案提到了XResQueryClientIdsX -Resource v1.2 扩展。我想知道如何使用它。
如何使用python 的 xcfib 模块查找与提供的 PID 关联的所有 X11 窗口 ID(假设没有竞争条件;窗口或进程没有被创建或销毁)。
我对 X11 不太了解,XCB API 文档似乎不完整,自动生成的 xcfib python 绑定也没有文档记录。根据我收集的信息,我需要:
从函数内部,如何确定该函数是否是从可视块模式调用的。这涉及从以下两个方面调用该函数:
对于精确的功能,幸运的是它在普通/命令模式或视觉模式下的行为相同,并选择了一行。显然有不止一行 - 来自a:firstline/lastline- 该函数不是从正常模式调用的。
现在的问题是我需要知道我是否处于可视块模式,单行与否。
我已经尝试了以下所有方法都无济于事:
function! T() range
echo [a:firstline, a:lastline]
echo [getpos("'<")[1:2], getpos("'>")[1:2]]
echo visualmode()
echo mode()
endfun
vnoremap TT :call T()<CR>
nnoremap TT :call T()<CR>
Run Code Online (Sandbox Code Playgroud)
视觉线模式的输出(注意疯狂的 max-int 输出):
[3, 4]
[[3, 1], [4, 2147483647]]
V
n
Run Code Online (Sandbox Code Playgroud)
我需要“无法完成”或“循序渐进”的各种答案。没有模糊的做这个然后做那个然后完成这个......我厌倦了跳过晦涩的VIM Goldberg-esque漏洞只是为了完成任何内置功能没有提供的简单任务,老实说我的vim-fu是还年轻。