LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: pluskid

请问能不能建立两个.emacs呢?

[复制链接]
 楼主| 发表于 2006-1-5 16:23:02 | 显示全部楼层
Post by herberteuler
呵呵,你写的 ecb 实际上不必是 interactive 的,你可以用 emacs -f ecb 来启动 Emacs 啊。

哦!这样啊!恩!这样也可以,但是做成interactive的的话,就可以在启动emacs之后如果再想开启ecb再用M-x ecb开启,而不是重新启动一次emacs呀。
interactive 除了有可以在 M-x func-name启动,还有什么其他功能或者是副作用吗?
回复 支持 反对

使用道具 举报

发表于 2006-1-5 17:09:22 | 显示全部楼层
你可以看看 interactive 的说明。如果安装了 Elisp Manual,可以这样看:
  1. C-h i melisp RET mcommand loop RET mdefining commands RET musing interactive RET
复制代码

如果没有安装,也可以用 C-h f interactive RET 来看。

Interactive 除了可以使一个函数成为一个命令外,还可以用于交互地获得用户提供的参数。比如下面这个函数:
  1. (defun add-interactive (a b)
  2.   (interactive
  3.    (list (string-to-number (read-string "First: "))
  4.          (string-to-number (read-string "Second: "))))
  5.   (message (format "%d" (+ a b))))
复制代码

它就从用户处得到两个参数,将它们转换为数字,并用 list 建立一个列表。这个列表被用来赋值给 a 和 b。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-5 20:36:13 | 显示全部楼层
:thank
谢谢了!我还想请问一下,如何动态的改变Emacs的窗口大小?
我知道可以在.emacs里面用
  1. (setq default-frame-alist
  2.         '(
  3.           (top . 0)
  4.           (left . 0)
  5.           (height . 50)
  6.           (width . 110)
  7.           ))
复制代码
来设置启动的时候的窗口的大小,可是我定义了一个函数,动态的用M-x resize来调用的时候却无法改变窗口的大小,把default-frame-alist改成frame-alist也不行,我用M-x describe-variable来看了一下default-frame-alist,好想是指新建窗口的大小(及其他参数),那么,可不可以动态的设置当前窗口的大小呢?怎样设置呢?谢谢!再次感谢herberteuler!
回复 支持 反对

使用道具 举报

发表于 2006-1-5 21:07:27 | 显示全部楼层
  1. (modify-frame-parameters (select-frame-by-name "emacs@*scratch*")
  2.                          '((top . 0)
  3.                            (left . 0)
  4.                            (height . 50)
  5.                            (width . 70)))
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-5 22:26:14 | 显示全部楼层
Post by herberteuler
  1. (modify-frame-parameters (select-frame-by-name "emacs@*scratch*")
  2.                          '((top . 0)
  3.                            (left . 0)
  4.                            (height . 50)
  5.                            (width . 70)))
复制代码

谢谢herberteuler!我的emacs显示的是emacs@localhost.localdomain,所以改一下就能用了!呵呵!真的太感谢了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-5 22:30:28 | 显示全部楼层
但是,emacs的标题栏会随着打开的buffer不同而改变呀,这个好像不是很通用呀?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-5 22:57:07 | 显示全部楼层
呵呵!知道了,可以使用默认的frame:
  1. (modify-frame-parameters (select-frame-by-name "emacs@localhost.localdomain")
复制代码
改成
  1.   (modify-frame-parameters nil
复制代码
就可以了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-5 23:15:43 | 显示全部楼层
还有一个问题,就是用什么命令可以让focus在打开speedbar之后自动跳回到原来的frame里面去呢?
其实我是定义了一个这样的函数:

  1. ;; load speedbar and resize window to a proper size
  2. (defun spdbar ()
  3.   "load speedbar and resize window to a proper size"
  4.   (interactive "")
  5. ;  (modify-frame-parameters (select-frame-by-name "emacs@localhost.localdomain")
  6.   (modify-frame-parameters nil
  7.                            '((top . 0)
  8.                              (left . 105)
  9.                              (height . 50)
  10.                              (width . 98)))
  11.   (speedbar)
  12.   )
复制代码

但是加载speedbar之后还要去用一下鼠标才能让焦点回到原来的窗口,感觉好麻烦。
回复 支持 反对

使用道具 举报

发表于 2006-1-6 10:09:57 | 显示全部楼层
你在这段代码的基础上修改一下吧:
  1. (let ((oldframe (selected-frame)))
  2.   (select-frame (next-frame))
  3.   (insert "abcdefg")
  4.   (select-frame oldframe))
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-6 12:42:06 | 显示全部楼层
唉!不知道怎么回事,我试验你那段代码都是可以的,可是我这样写:
  1.      (let ((oldframe (selected-frame)))
  2.       (modify-frame-parameters nil
  3.                            '((top . 0)
  4.                              (left . 105)
  5.                              (height . 50)
  6.                              (width . 98)))
  7.       (speedbar)
  8.       (select-frame oldframe))
复制代码
speedbar出现之后焦点还是在speedbar那儿,是不是执行了什么异步操作之类的?比如说调用了(speedbar)然后调用(select-frame oldframe)之后由于(speedbar)暗中注册了个什么hook之类的,在(select-frame oldframe)之后又获取了焦点呀? 我看了一下(speedbar)是(speedbar-frame-mode)的别名,看了speedbar.el嘿嘿!其实也看不懂,最后注意到有个函数叫做(speedbar-get-focus),又想到emacs很多函数在两次重复调用会得到相反的结果(比如再调用一次speedbar应该是把speedbar关掉了),于是我把代码改成了:
  1. (modify-frame-parameters nil
  2.                            '((top . 0)
  3.                              (left . 105)
  4.                              (height . 50)
  5.                              (width . 98)))
  6.       (speedbar)
  7.       (speedbar-get-focus)
  8.   )
复制代码
这下就可以了!呵呵!太好了!以后要好好向herberteuler学习emacs呀!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表