例如,我的函数中的一行代码
(message "char %c:%d" character count)
将打印每个角色的计数。对于不可打印的字符,例如换行符和制表符,我希望输出看起来像:
\n:4
\t:6
而不是字面上打印换行符和制表符。我怎么能这样做?
答案 0 :(得分:6)
您可以通过在打印前绑定某些变量来实现某些。
`print-escape-newlines' is a variable defined in `C source code'.
Its value is nil
Documentation:
Non-nil means print newlines in strings as `\n'.
Also print formfeeds as `\f'.
还有:
print-escape-nonascii
Non-nil means print unibyte non-ASCII chars in strings as \OOO.
print-escape-multibyte
Non-nil means print multibyte characters in strings as \xXXXX.
这些都适用于prin1
,因此您可以在格式中使用%S
代码。 e.g:
(let ((print-escape-newlines t))
(format "%S" "new\nline"))
答案 1 :(得分:3)
正如@wvxvw所建议的
(defun escaped-print (c)
(if (and (< c ?z)
(> c ?A))
(string c)
(substring (shell-command-to-string (format "printf \"%%q\" \"%s\"" (string c)))
2 -1)))
子串部分是从printf的输出中删除多余的东西。我对这个命令知之甚少,所以它可能没有完美无瑕。
答案 2 :(得分:1)
emacs中可能有某些代码可以为您执行此操作,但一种方法是编写将特殊字符转换为字符串的函数:
(defun print-char(c)
(case c
(?\n "\\n")
(?\t "\\t")
(t (string c))))
请注意,您需要使用字符串格式而不是字符,因为您实际上是为每个特殊字符编写多个字符。