在光标点处生成随机的 5 个字母 + 数字字符串。 (全部小写)
Generate a random 5 letter+number string at cursor-point. (all lower-case)
我正在使用 Emacs 24.5(在 Spacemacs 中)。我希望能够生成
一个随机的 5 个字符的字符串,无论我在 emacs 中的光标在哪里,只需按一个键,比如 F2。
典型的随机字符串是 jb2nx
,所有字母始终小写。 emacs 启动时随机数生成的种子值应该始终不同,以防止 emacs 在下次打开时生成相同的随机字符串序列。
注意:
我需要这个功能,在点上插入一个独特的词,把它用作书签。这样我就可以打开包含随机字符串的行
来自 Org-mode 例如
[[file:some-code-file::jb2nx][This line in the code-file]]
将是我的 Org 文件中的一行。而 jb2nx
会放在里面
对代码文件中引用的行的注释。
我不想在 :: 之后直接引用行号,因为在编辑代码文件时行号可能会发生变化。
(defun random-alnum ()
(let* ((alnum "abcdefghijklmnopqrstuvwxyz0123456789")
(i (% (abs (random)) (length alnum))))
(substring alnum i (1+ i))))
(defun random-5-letter-string ()
(interactive)
(insert
(concat
(random-alnum)
(random-alnum)
(random-alnum)
(random-alnum)
(random-alnum))))
(global-set-key (kbd "<f2>") 'random-5-letter-string)
虽然 Brian 的解决方案很好,但我个人更喜欢直接在缓冲区中工作,而不是生成中间字符串:
(defun insert-random-five ()
(interactive)
(dotimes (_ 5)
(insert
(let ((x (random 36)))
(if (< x 10) (+ x ?0) (+ x (- ?a 10)))))))
扩展 Brian 的答案,如果您只需要一个随机字符串而不插入它并且具有可配置的长度:
(defun random-string (n)
"Generate a slug of n random alphanumeric characters.
Inefficient implementation; don't use for large n."
(if (= 0 n)
""
(concat (random-alnum) (random-string (1- n)))))
我正在使用 Emacs 24.5(在 Spacemacs 中)。我希望能够生成 一个随机的 5 个字符的字符串,无论我在 emacs 中的光标在哪里,只需按一个键,比如 F2。
典型的随机字符串是 jb2nx
,所有字母始终小写。 emacs 启动时随机数生成的种子值应该始终不同,以防止 emacs 在下次打开时生成相同的随机字符串序列。
注意:
我需要这个功能,在点上插入一个独特的词,把它用作书签。这样我就可以打开包含随机字符串的行 来自 Org-mode 例如
[[file:some-code-file::jb2nx][This line in the code-file]]
将是我的 Org 文件中的一行。而 jb2nx
会放在里面
对代码文件中引用的行的注释。
我不想在 :: 之后直接引用行号,因为在编辑代码文件时行号可能会发生变化。
(defun random-alnum ()
(let* ((alnum "abcdefghijklmnopqrstuvwxyz0123456789")
(i (% (abs (random)) (length alnum))))
(substring alnum i (1+ i))))
(defun random-5-letter-string ()
(interactive)
(insert
(concat
(random-alnum)
(random-alnum)
(random-alnum)
(random-alnum)
(random-alnum))))
(global-set-key (kbd "<f2>") 'random-5-letter-string)
虽然 Brian 的解决方案很好,但我个人更喜欢直接在缓冲区中工作,而不是生成中间字符串:
(defun insert-random-five ()
(interactive)
(dotimes (_ 5)
(insert
(let ((x (random 36)))
(if (< x 10) (+ x ?0) (+ x (- ?a 10)))))))
扩展 Brian 的答案,如果您只需要一个随机字符串而不插入它并且具有可配置的长度:
(defun random-string (n)
"Generate a slug of n random alphanumeric characters.
Inefficient implementation; don't use for large n."
(if (= 0 n)
""
(concat (random-alnum) (random-string (1- n)))))