鉴于Emacs那神奇的启动速度,如果像Vim一样,每打开一个文件都启动一个Emacs的话,那肯定是无法忍受的,于是,Linux下可以使用emacs --deamon来启动Emacs作为一个守护进程,但该参数不支持windows平台(虽然说在windows平台使用Emacs是一件感觉很别扭的事情),估计是使用了windows平台没有的特性,具体使用的什么特性我并没有研究。

但是windows平台还是可以实现只启动Emacs单实例的,这样每次打开文件时用这个已经存在的实例打开即可,避免等待Emacs那尴尬的启动速度。其原理是启动一个Emacs实例作为server,监听某个端口,然后在需要打开文件时,利用client连接那个端口,将需要打开的文件路径等信息传递给server,然后作为server的Emacs收到路径信息后,找到文件并打开它。

要将Emacs启动为一个server,需要在Emacs的配置文件中加入以下命令:

(server-start)

这样,使用runemacs.exe启动Emacs后,在Home目录(HOME目录的设定及具体值请参看这里)的.emacs.d\server目录下会生成一个server文件,里面记录了Emacs实例的IP地址及端口号等信息,在退出Emacs后,这个文件就会被删除。

现在server已经起来了,下面就可以用client连接server了,在Emacs安装目录的bin目录下会有emacsclient.exe和emacsclientw.exe两个exe文件,前者基于命令行,后者有图形界面,使用client来连接server打开文件的命令如下:

emacsclientw.exe --no-wait --alternate-editor="runemacs.exe" "~/.emacs"

其中--no-wait参数告诉client不要等待Emacs server返回,而是直接退出;--alternate-editor参数指定一个fallback的编辑器,在server不存在的时候就使用该编辑器来打开文件,在这里指定为runemacs.exe,这样就可以在Emacs没运行的情况下运行Emacs并使用之进行编辑,第三个参数是要打开的文件,这里指定为HOME目录下的配置文件.emacs。在运行这个命令后,emacsclientw.exe会去<HOME>\.emacs.d\server目录下找到server文件,取出里面的IP地址和端口号,连接之,将"~/.emacs"传过去,然后作为server的Emacs打开该文件,因为有--no-wait参数,所以client不会等作为server的Emacs返回结果就直接退出了;当然如果在<HOME>\.emacs.d\server目录没有找到server文件的话,client就会调用runemacs.exe来打开该文件。

====================================我是自豪的分界线====================================

情况来了,我们不可能在每打开一个文件的时候就去命令行输入这么大一串东西,况且路径每次都有变化,所以,将“Edit with Emacs”加入右键菜单是不二选择,于是,在注册表中建如下键值:

HKEY_CLASSES_ROOT\*\shell\Edit with Emacs\command

并将其default的值设为:

"path\to\emacsclientw.exe" --no-wait --alternate-editor="path\to\runemacs.exe" "%1"

上述命令需要把emacsclientw.exe和runemacs.exe的路径换成实际路径,而后面的%1则代表要打开的文件。最好把所有的带有路径的部分都加上引号,以防止空格的”骚扰“。如下图:

右键菜单的效果如下图:

windows平台Emacs单实例原理、设置及右键菜单的添加相关推荐

  1. 设置右键菜单,添加右键快捷应用

    设置右键菜单,添加右键快捷应用 最近,我安装了pycharm,在安装时把它添加到了右键快捷方式里,但我当时是通过Anaconda的链接安装的,所以程序的名字特别长,显得右键菜单很宽很不舒服. 如下图: ...

  2. 实例-Vue中使用右键菜单之@xunleivue-context-menu组件的使用

    实例-Vue中使用右键菜单之@xunlei/vue-context-menu组件的使用 npm地址--https://www.npmjs.com/package/@xunlei/vue-context ...

  3. Windows平台RTMP多实例推送探讨

    之前,我们博客 https://blog.csdn.net/renhui1112/article/details/105624392 提到,Android平台RTMP多实例推送的几种情况探讨,简单来说 ...

  4. Winform中怎样设置ContextMenuStrip右键菜单的选项ToolStripMenuItem添加照片

    场景 怎样在Winform程序中添加鼠标右键时使子选项显示图片. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编 ...

  5. 添加右键菜单_如何在Windows文件夹的右键菜单中添加“打开PowerShell”

    原文:https://www.howtogeek.com/165268/how-to-add-open-powershell-here-to-the-context-menu-in-windows/ ...

  6. 设置的一级菜单图标添加背景

    设置中的一级菜单加载主要由DashboardFragment加载 第三方菜单加载(DashboardFeatureProviderImpl): @Overridepublic List<Dyna ...

  7. Windows一键JS混淆加密(集成到鼠标右键菜单)

    javascript-obfuscator是一个免费的JavaScript代码混淆工具,它功能强大,可以把你的源代码变得"面目全非",完全没有可读性.还具有部分防调试功能,给Jav ...

  8. ubuntu16.04 xfce4的鼠标主题设置为oxygen-red、修改文件夹背景颜色、两处系统字体设置、右键菜单添加压缩解压选项

    安装 oxygen-cursor-theme oxygen-cursor-theme-extra 然后 设置=>鼠标和触摸板 如果是自定义鼠标主题,那么把主题文件解压后拷贝到: /usr/sha ...

  9. 如何在Windows文件夹的右键菜单中添加“打开PowerShell”

    按照这个来,就好了 然后按住shift 点击鼠标右键,就可以出现 open powerShell here

  10. windows右键菜单中添加打开方式

    原文地址;https://jingyan.baidu.com/article/08b6a591f334f914a809223b.html 1.打开注册表编辑器.打开运行窗口,快捷键,开始+R.输入&q ...

最新文章

  1. Windows Server 2008 和 Windows Vista 结合的功能更加强大
  2. 人类将可能操控AI?神经网络语言处理工作原理被破解
  3. Linux下Redis-3.0.7版本的安装以及Redis主备的部署(二)
  4. 数据机房建设常用材料有哪些?
  5. 使用PyTorch创建神经网络
  6. Microsoft SQL Server中的事务(转载)
  7. idea部署maven+javaweb项目到jboss
  8. [转载] python与c/c++相比有哪些优势
  9. MySQL的主从复制详解
  10. Formview的自动绑定
  11. nginx服务器硬件配置要求_聚英国际|Filecoin网络对服务器硬件要求及工作流程分析...
  12. 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...
  13. python 3d游戏脚本_3ds Max python脚本编写及部分API介绍
  14. phpquery中文手册
  15. ApacheCN 活动汇总 2019.7.27
  16. 如何使用小米手机对文档进行扫描
  17. 03.项目管理实践工具-团队绩效评价
  18. php生成中国标准时间,中国时间标准
  19. 如何实时计算日累计逐单资金流
  20. ts-学习类型-class

热门文章

  1. 进阶无人驾驶—百度Apollo高精度地图
  2. 思迅商云8版的最后一个版本_泪目!科比成为2K21第3位封面球星,将推出曼巴永恒版...
  3. matlab凑数求和,excel自动凑数求和 使用规划求解来解决excel自动凑数求和的方法...
  4. Redhat、Fedora、CentOS、OEL之间的关系与不同。
  5. 可以自学计算机考证吗
  6. 【毕业设计源码】基于JAVA的自驾游小程序的设计与实现
  7. 架构师是否需要深入代码?
  8. 贝叶斯公式求解公园凉鞋问题
  9. mysql视图默认校对规则_MySQL 校对规则
  10. 陈景润定理对筛法理论的贡献