免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw
打印 上一主题 下一主题

有关 Emacs 使用技巧的内容请在这个帖子讨论。 [复制链接]

论坛徽章:
0
721 [报告]
发表于 2008-08-18 12:50 |只看该作者

回复 #720 retuor 的帖子

C-h k <CR>
RET runs the command comint-send-input

...
(insert "x")
(comint-send-input)
...

论坛徽章:
0
722 [报告]
发表于 2008-08-18 12:53 |只看该作者
原帖由 retuor 于 2008-8-18 11:40 发表
我说直接注入的意思是想在一个函数里发送 enther 给一个  buffer.

在快捷键上绑定的函数略大了一些,要进行一些错误处理,所以直接用宏不合适。我在上面把键盘宏缩减到了一个 "\C-m",然后在需要的时候调用这 ...



  1. (defun cmdineshll (cmdstr)
  2.   (set-buffer "*eshell*")
  3.   (goto-char (point-max))
  4.   (insert cmdstr)
  5.   (eshell-send-input))

  6. (cmdineshll "cd ..")
复制代码

论坛徽章:
0
723 [报告]
发表于 2008-08-18 14:08 |只看该作者
原帖由 carleo21 于 2008-8-18 12:50 发表
C-h k
RET runs the command comint-send-input

...
(insert "x"
(comint-send-input)
...


你这个方法我还真用过。  , 握手。

不过我这里显示的是:


  1. RET runs the command newline, which is an interactive compiled Lisp
  2. function in `simple.el'.

  3. It is bound to RET.

  4. (newline &optional ARG)

  5. .......
复制代码


但 newline 我试过了,不行。

可能是版本不同,我这里没有函数 comint-send-input。后来在 comint 起头的函数里查到一个 comint-send-eof,这个好用了。

谢谢。

论坛徽章:
0
724 [报告]
发表于 2008-08-18 14:10 |只看该作者
原帖由 lgfang 于 2008-8-18 12:53 发表




(defun cmdineshll (cmdstr)
  (set-buffer "*eshell*")
  (goto-char (point-max))
  (insert cmdstr)
  (eshell-send-input))

(cmdineshll "cd ..")


eshll-send-input 正是我所求,谢谢。在普通 shell 里要用 comint-send-eof。


这里真是个好地方,再次感谢。

论坛徽章:
0
725 [报告]
发表于 2008-08-18 14:21 |只看该作者
原帖由 retuor 于 2008-8-18 14:08 发表


你这个方法我还真用过。  , 握手。

不过我这里显示的是:


RET runs the command newline, which is an interactive compiled Lisp
function in `simple.el'.

It is bound to RET.

(newlin ...


更正。我看错了,在我的系统上有 comint-send-input 命令。

C-h k 必须在 shell 里执行。我在查找对应关系的时候,是在一个普通文本 buffer 里执行 C-h k 的,所以得到 newline.

论坛徽章:
0
726 [报告]
发表于 2008-08-22 00:37 |只看该作者
有没人对 emacs lisp 感兴趣?

那个画星星的帖子,看这里--> http://bbs.chinaunix.net/thread-1249143-1-1.html

用 elisp  实现。 elisp 好像没有内建的 zip,下面那个 zip 是自己实现的。


  1. (defun f (n)
  2.   (cond ((= n 0) '("*"))
  3.         (t (let* ((old (f (1- n)))
  4.                   (white (mapcar (lambda (m) (make-string m ? ))
  5.                                  (number-sequence (1- (expt 2 (1- n))) 0 -1))))
  6.              (append old (mapcar (lambda (x) (concat (car x) (cadr x) (car x)))
  7.                                  (zip old white)))))))


  8. (let ((buf (get-buffer-create "*new*")))
  9.   (mapcar (lambda (x) (princ (concat x "\n") buf)) (f 4)))
复制代码

[ 本帖最后由 retuor 于 2008-8-22 00:45 编辑 ]

论坛徽章:
0
727 [报告]
发表于 2008-08-22 00:41 |只看该作者
在 *new* buf 中的输出:

oh.png (21.41 KB, 下载次数: 77)

oh.png

论坛徽章:
0
728 [报告]
发表于 2008-08-24 18:11 |只看该作者
原帖由 retuor 于 2008-8-22 00:37 发表
有没人对 emacs lisp 感兴趣?

那个画星星的帖子,看这里--> http://bbs.chinaunix.net/thread-1249143-1-1.html

用 elisp  实现。 elisp 好像没有内建的 zip,下面那个 zip 是自己实现的。


(defu ...


这是我的实现。思路和你的不太一样,我基本上是在对buffer进行操作,而不是进行字符串处理


  1. (defun print-sierpinski (n)
  2.   "Print sierpinski triangle in buffer *sirpinski* --lgfang"
  3.   (interactive "nInput a number(<=6): ")
  4.   (if (> n 6) (error "n should be rather small, otherwise can not
  5.   show the triangle in screen"))
  6.   (switch-to-buffer (get-buffer-create "*Sierpinski*"))
  7.   (delete-region (point-min) (point-max))
  8.   (insert "*")
  9.   (dotimes (dummy n)
  10.     (kill-rectangle (point-min) (point-max))
  11.     (delete-region (point-min) (point-max))
  12.     (yank-rectangle)
  13.     (insert "\n")
  14.     (yank-rectangle)
  15.     (exchange-point-and-mark)
  16.     (yank-rectangle))
  17.   (delete-trailing-whitespace))
复制代码

[ 本帖最后由 lgfang 于 2008-8-24 18:13 编辑 ]

论坛徽章:
0
729 [报告]
发表于 2008-08-24 21:55 |只看该作者
楼上的做法很妙。

我一开始是这样想的:如果用画屏的方法来做,可以把一个矩形区域复制出来,然后在下面粘贴两次。但终端上的文本输出与画屏很不一样,才改了思路。没注意到 emacs 的 rectangle 可以有类似效果。

按你的思路写了一个:


  1. (defun f (n)
  2.   (switch-to-buffer (get-buffer-create "*draw*"))
  3.   (delete-region (point-min) (point-max))
  4.   (insert "*")
  5.   (dotimes (foo (1- n))
  6.     (let ((p (point-min)) (q (point-max)))
  7.           (copy-rectangle-to-register ?a p q)
  8.           (goto-char q)
  9.           (insert "\n")
  10.           (insert-register ?a)
  11.           (insert-register ?a))))

  12. (f 6)
复制代码

论坛徽章:
0
730 [报告]
发表于 2008-08-25 14:42 |只看该作者
elisp 推广:

用 elisp 来处理这个问题:

http://bbs.chinaunix.net/thread-1253307-1-1.html


  1. (setq h (make-hash-table))
  2. (mapcar (lambda (x) (puthash (expt 2 x) x h))
  3.           (number-sequence 0 7))

  4. (gethash 8 h)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP