作为我的问题介绍的代码插图:
import re, inspect, datetime
inspect.getargspec (re.findall)
# =>
# ArgSpec(args = ['pattern', 'string', 'flags'], varargs=None,
# keywords=None, defaults = (0,))
type (datetime.datetime.replace)
# => <type 'method_descriptor'>
inspect.getargspec (datetime.datetime.replace)
# => Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "/usr/lib/python2.7/inspect.py", line 816, in getargspec
# raise TypeError('{!r} is not a Python function'.format(func))
# TypeError: <method 'replace' of 'datetime.datetime' objects> is
# not a Python function
Run Code Online (Sandbox Code Playgroud)
看来,对我来说,只有这样,才能找到的签名datetime.datetime.replace,而我的代码是看它在商务部:date.replace(year, month, day). …
有人可以向我解释这个非常简单的代码片段中发生了什么吗?
(defun test-a ()
(let ((x '(nil)))
(setcar x (cons 1 (car x)))
x))
Run Code Online (Sandbox Code Playgroud)
在(test-a)第一次打电话时,我得到了预期的结果:((1)).但令我惊讶的是,再次召唤它,我得到了((1 1)),((1 1 1))等等.为什么会这样?期待(test-a)永远回归我错了((1))吗?另请注意,在重新评估定义后test-a,返回结果将重置.
还要考虑这个功能是否符合我的预期:
(defun test-b ()
(let ((x '(nil)))
(setq x (cons (cons 1 (car x))
(cdr x)))))
Run Code Online (Sandbox Code Playgroud)
(test-b)总是回来((1)).为什么不test-a和test-b等同?
我想做
(destructuring-bind (start end) (bounds-of-thing-at-point 'symbol))
Run Code Online (Sandbox Code Playgroud)
但是bounds-of-thing-at-point返回一个cons单元而不是列表,所以
destructuring-bind不起作用.什么可以适用于这种情况?
我在Clojure中找到了这个代码来筛选出前n个素数:
(defn sieve [n]
(let [n (int n)]
"Returns a list of all primes from 2 to n"
(let [root (int (Math/round (Math/floor (Math/sqrt n))))]
(loop [i (int 3)
a (int-array n)
result (list 2)]
(if (>= i n)
(reverse result)
(recur (+ i (int 2))
(if (< i root)
(loop [arr a
inc (+ i i)
j (* i i)]
(if (>= j n)
arr
(recur (do (aset arr j (int 1)) arr)
inc
(+ j inc)))) …Run Code Online (Sandbox Code Playgroud) 我一直在使用默认主题,大约有10个面孔已经改变
custom-set-faces了一段时间了.但有时我想尝试一些自定义主题.问题是他们设置了超过10个面孔,一旦我加载了自定义主题,就没有办法回到我以前的设置.
只是为了澄清:
(load "faces").一切都很好.load-theme wombat.一切都很好.(load "faces")再次:一切都很乱,因为很多面孔仍然留在wombat州里.有时单独的主题彼此不兼容,例如第二个主题设置比第一个主题更多的面孔,当返回第一个主题时,一切都变得一团糟.
所以我想知道是否有类似的东西load-theme default会将每个可以想象到的脸重置为默认emacs -q状态.
然后,我可以用我的10个自定义面调整它,并拥有我自己的主题,不会有我描述的问题.
我无法弄清楚这一点.为什么这些行为有所不同:
(shell-command "git log")
(shell-command "git shortlog")
Run Code Online (Sandbox Code Playgroud)
第一个按预期工作:返回0并将东西打印到shell输出缓冲区.第二个返回0但不打印任何内容.这是为什么?
也
git log并git shortlog在完美地工作ansi-termgit log并git shortlog发出警告但仍然有效shell我想在源文件中删除带引号的字符串,而不必标记字符串和kill-region的开头,只需将点放在带引号的字符串中的任意位置并按下快捷键即可.
我尝试在elisp中编写一个函数,但我发现该文件需要从头开始解析,以确定该点是否在引用的字符串内,并找到引用字符串的边界(同样处理\")...
但该文件已被font-lock解析.所以现在我可以知道我是否在引用的字符串中:
(defun inside-quoted-string? ()
(interactive)
(print (find 'font-lock-doc-face (text-properties-at (point)))))
Run Code Online (Sandbox Code Playgroud)
但是我如何获得字符串的边界?font-lock知道它,因为它很好地用蓝色突出显示它,但我怎么得到它?
编辑:谢谢你的回答.我想出了这个完全符合我想要的代码 - 在不选择区域的情况下移动代码,甚至移动到代码的开头.
(defun kill-at-point ()
"Kill the quoted string or the list that includes the point"
(interactive)
(let ((p (nth 8 (syntax-ppss))))
(if (eq (char-after p) ?\")
(progn
(goto-char p)
(kill-sexp))
(progn
(up-list)
(let ((beg (point)))
(backward-list)
(kill-region beg (point)))))))
(global-set-key (kbd "C-,") 'kill-at-point)
Run Code Online (Sandbox Code Playgroud)
欢迎提出任何改进建议.
目前的缩进对cl-flet我来说似乎真的很难看.例如,见:
(defun foo (lst)
(cl-flet ((unusually-long-bar (x)
(1+ x)
(1+ x)
(1+ x)))
(mapcar #'unusually-long-bar lst)))
Run Code Online (Sandbox Code Playgroud)
我想将它设置为更合理的东西,例如:
(defun foo (lst)
(cl-flet ((unusually-long-bar (x)
(1+ x)
(1+ x)
(1+ x)))
(mapcar #'unusually-long-bar lst)))
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
假设我有以下项目树:
src
data
doc
Run Code Online (Sandbox Code Playgroud)
我想将所有文件夹保存在 Git 存储库中,并发布到 Gitlab。但我不想跟踪data并doc与src.
所以我使用以下策略:
git remote add origin ADDRESS
git submodule add -b data ADDRESS data
git submodule add -b doc ADDRESS doc
Run Code Online (Sandbox Code Playgroud)
它实际上工作正常,除非我尝试使用以下命令复制存储库:
git clone --recursive ADDRESS
Run Code Online (Sandbox Code Playgroud)
所有对象都被传输 3 次:rootdata和docall 都包含:
有没有简单的方法可以避免这种情况?只是为了澄清我想要什么:
origin/master,而不是其他两个origin/data。origin/doc。使用 3 个单独的存储库很容易实现,但这太麻烦了,因为我将这种方法应用于多个项目。
git worktree从这个答案中,我可以手动实现我想要的。
但是现在,而不是自动方法(消耗 4 倍带宽):
git clone --recursive git@foo:foo/bar.git …Run Code Online (Sandbox Code Playgroud) 我的包 ,lispy使用来自 的函数ace-jump-mode。我仍在考虑是否应该使用;; Package-Requires:cookie 或featurep为此使用cookie ,但主要问题是我想要一个干净的字节编译emacs -q.
我认为这应该消除字节编译警告:
(declare-function ace-jump-char-mode "ext:ace-jump-mode")
Run Code Online (Sandbox Code Playgroud)
但事实并非如此。对此有何想法?
确切地说,警告是“以下函数未知定义:ace-jump-char-mode,helm”。