Windows 下用来快速启动 emacs client 的脚本

http://liu233w.github.io/blog/2016/11/15/windows-emacs-cmd/

2 个赞

突然发现我的标题起得不大好_(:3」∠)_

标题可以改呀

这我知道,只是刚刚我的ego出了点问题,没法改了_(:зゝ∠)_

和你的方法类似,不过我是修改了vimd中的autohotkey脚本,这样更方便。

TC_RunEmacs(filename)
{
	;; 如果不存在emacs,则删除Server文件后再运行
	IfWinNotExist, ahk_class Emacs
	{
		FileDelete, d:\emacs\.emacs.d\server\server
	    Run, D:\emacs\bin\emacsclientw.exe -n -a d:\emacs\bin\runemacs.exe --server-file d:\emacs\.emacs.d\server\server "%filename%",, Max
	}
	Else
	{
		;; 如果传入文件,则打开
		if StrLen(filename) > 1
	    {
	    	Run, D:\emacs\bin\emacsclientw.exe -n -a d:\emacs\bin\runemacs.exe --server-file d:\emacs\.emacs.d\server\server "%filename%",, Max
	    }
	    ;; 否则在最大、最小化间切换
	    else
		{
		    IfWinNotActive
		    {
		        WinMaximize
		        WinActivate
		    }
		    else
		    {
		        WinGet, TcWinState, MinMax, A
		        If (TcWinState = 1)
		            WinMinimize
		        Else
		            WinMaximize
		    }
	    }
	}
}
1 个赞

我使用了你的方法,没有效果啊,不知道是什么原因,没有报错,只是重新打开了一次Emacs,把文件打开了。 好像是没有使用server file,可能的原因是什么啊?

可否告知一下要把这段代码放在哪个文件里,怎么传递文件名到Emacs啊?

你可以试一下在命令行里面打开cmd文件,然后看看有什么错误信息。如果直接双击打开的话,即使报错也是看不到的。

然后你要确定一下 server-file 的那个位置有没有server文件。如果emacs找不到的话会重新打开emacs的

有server文件,我用的spacemacs,它是自动启用server的

"(ºДº*)神秘啊

如果路径没有错的话我就不知道怎么回事了_(:3」∠)_

我这段脚本是修改了vimd中tc的编辑命令,参数是由tc传递过来的。 否则就只能单独写一个autohotkey脚本,绑定在某个热键上,但是那样就没办法传递参数了。

我也用vimd,很长时间了,但是对它的代码没有研究过,这个功能要怎么实现啊?

https://github.com/jixiuf/my_autohotkey_scripts/blob/master/ahk_scripts/switchWindow.ahk 说到autohotkey 突然想到之前写的一段代码, 给你们参考。

你用totalcmd吗?我的代码是配合这个软件来使用的。

用啊,我的文件关联都是用的tc的内部关联,很方便,有你的代码就更方便了。

首先在TotalCommander.ahk中,增加如下代码。

<TC_RunEmacs>:
    TC_RunEmacs("")
return
<TC_EmacsEdit>:
    Clipboard :=
    SendPos(2018)
    ClipWait
    TC_RunEmacs(Clipboard)
return
TC_RunEmacs(filename)
{
	;; 如果不存在emacs,则删除Server文件后再运行
	IfWinNotExist, ahk_class Emacs
	{
		FileDelete, d:\emacs\.emacs.d\server\server
	    Run, D:\emacs\bin\emacsclientw.exe -n -a d:\emacs\bin\runemacs.exe --server-file d:\emacs\.emacs.d\server\server "%filename%",, Max
	}
	Else
	{
		;; 如果传入文件,则打开
		if StrLen(filename) > 1
	    {
	    	Run, D:\emacs\bin\emacsclientw.exe -n -a d:\emacs\bin\runemacs.exe --server-file d:\emacs\.emacs.d\server\server "%filename%",, Max
	    }
	    ;; 否则在最大、最小化间切换
	    else
		{
		    IfWinNotActive
		    {
		        WinMaximize
		        WinActivate
		    }
		    else
		    {
		        WinGet, TcWinState, MinMax, A
		        If (TcWinState = 1)
		            WinMinimize
		        Else
		            WinMaximize
		    }
	    }
	}
}

并将e键的定义改过来。 vim.map("e", "<TC_EmacsEdit>", "TTOTAL_CMD")

然后在vimd.ini中,增加启动emacs的热键,我用Win+’ <w-'>=<TC_RunEmacs>

2 个赞

运行良好,谢谢,非常感谢!

https://tumashu.github.io/blog/2015/11/05/window-环境下的-emacsclient-启动脚本模板/

1 个赞