LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 714|回复: 12

emacsclient的总题

[复制链接]
发表于 2011-9-16 16:29:30 | 显示全部楼层 |阅读模式
root用户能用emacsclient连接到其他用户的emacs编辑吗?
发表于 2011-9-17 09:11:37 | 显示全部楼层
不太明白楼主的需求。如果是需要root权限编辑的话,打开文件时直接用sudo就行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-17 16:38:45 | 显示全部楼层
普通用户的emacs已运行于dameon模式,我想在root 用户使用emacsclient编辑文档时,在普通用户的emacs中打开。
回复 支持 反对

使用道具 举报

发表于 2011-9-17 17:38:40 | 显示全部楼层
Post by chengliye;2152260
普通用户的emacs已运行于dameon模式,我想在root 用户使用emacsclient编辑文档时,在普通用户的emacs中打开。


以普通用户身份执行的emacsclient 就能编辑root权限的文件,这是我的脚本:

  1. #!/bin/bash
  2. file_name="$@"
  3. if [ "${file_name:0:1}" != "/" ]
  4. then
  5.     abs_path_prefix="$(pwd)/"
  6. else
  7.     abs_path_prefix=""
  8. fi

  9. if [ -w "$file_name" ]
  10. then
  11.     sudo_prefix=""
  12. else
  13.     sudo_prefix="/sudo::"
  14. fi

  15. if  pgrep  -f "emacsclient -c">/dev/null
  16. then
  17.                 emacs_client_cmd="emacsclient"
  18. else
  19.                 emacs_client_cmd="emacsclient -c"
  20. fi

  21. if [ -z "$file_name" ]
  22. then
  23.                 args="$@"
  24. else
  25.                 args="--eval "(find-file \\"${sudo_prefix}${abs_path_prefix}${file_name}\\")""
  26. fi

  27. cmd="${emacs_client_cmd} ${args}"
  28. sh -c  "$cmd" >/dev/null &


复制代码

以后编辑文件的时候运行这个脚本即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-17 17:58:14 | 显示全部楼层
奇怪,用了你的代码,是打开了,但是新开了一个窗口
回复 支持 反对

使用道具 举报

发表于 2011-9-17 18:20:48 | 显示全部楼层
Post by chengliye;2152260
普通用户的emacs已运行于dameon模式,我想在root 用户使用emacsclient编辑文档时,在普通用户的emacs中打开。


你要同时使用root和普通用户吗?还是在普通用户中以su/sudo的方式来取得root权限呢?
pheyx,不知此脚本是在root下执行的么?还是在普通用户下?如果在普通用户下,是不需要什么脚本的。
普通用户的emacs中,直接用 C-x C-f sudo:root@localhost /abcd 就能以root权限编辑文件abcd了。
回复 支持 反对

使用道具 举报

发表于 2011-9-17 18:22:22 | 显示全部楼层
Post by chengliye;2152264
奇怪,用了你的代码,是打开了,但是新开了一个窗口


你只要确保编辑文件时只用这个脚本而不是别的命令(比如说单独的emacsclient 或其他的wrapper)打开,所有你打开的文件都会在一个frame里。如果想在文件管理器中用这个脚本打开关联文件,可以修改/usr/share/applications/emacsclient.desktop把其中的命令改成脚本名称。因为你重新merge 或升级 emacs会把这个.desktop文件覆盖掉,所以可以考虑把这个.desktop复制为别的名字。
回复 支持 反对

使用道具 举报

发表于 2011-9-17 18:41:56 | 显示全部楼层
Post by zhou3345;2152266

pheyx,不知此脚本是在root下执行的么?还是在普通用户下?如果在普通用户下,是不需要什么脚本的。
普通用户的emacs中,直接用 C-x C-f sudo:root@localhost /abcd 就能以root权限编辑文件abcd了。

是以普通用户身份执行。之所以用这个脚本是我希望实现以下功能(可能偏离了楼主的问题):
1.不加参数运行该脚本,会打开一个emacs窗口或者切换到已有的emacs窗口(而仅运行emcasclient 不加参数不会打开emacs窗口)
2.加参数运行脚本,如果已有emacs窗口的话,会在已有的窗口中打开文件;如果当前没有emacs窗口,会打开一个新的。(如果不用这个脚本用单独的emacsclient命令的话,会比较麻烦)
3.如果要打开的文件普通用户没有权限写的话,自动用sudo模式打开。

其实初衷主要是为了在文件管理器中能够方便用emacs打开关联文件,而不至于打开一个文件就建立一个窗口;而且还能够编辑普通用户没有权限编辑的文件。

当然如果习惯于在emacs窗口中c-x c-f打开文件的话,这个脚本可能没有存在的必要。但对我而言,它可以在某些情况下带来一些方便。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-18 13:08:36 | 显示全部楼层
其实我的目的是让不同用户,甚至虚拟机的用户都能使用同一个emacs编辑文档。
回复 支持 反对

使用道具 举报

发表于 2011-9-18 14:09:38 | 显示全部楼层
Post by chengliye;2152342
其实我的目的是让不同用户,甚至虚拟机的用户都能使用同一个emacs编辑文档。


你需要的是一个“云”文本编辑器,google docs那样的。emacs不是。

emacs-server 运行在那里,即便你用client连上去了,那你让server怎么去识别文件路径呢?同一个系统的不同用户还好,可以以root或者某一用户为准,那虚拟机又怎么办呢?

估计是嫌emacs太大了启动又耗时又好内存的。vim不错呀,又小巧又方便。
俺主系统用emacs,其他系统一般用vim。
回复 支持 反对

使用道具 举报

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

本版积分规则

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