如何创建右键单击上下文shell快捷方式“使用Emacs编辑”?

时间:2009-01-18 12:51:49

标签: windows emacs windows-shell windows-explorer

Notepad ++会自动添加一个shell快捷方式,这样当您在Windows资源管理器中时,可以右键单击一个文件并选择“使用Notepad ++编辑”。我怎么能用emacs做同样的事情?我正在使用GNU Emacs 22.3 for Windows。

8 个答案:

答案 0 :(得分:29)

这就是我所拥有的 - 与其他答案类似。创建一个名为emacs-conextmenu.reg(或任何你想要的东西)的新文本文件并将以下内容粘贴到:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
[HKEY_CLASSES_ROOT\*\shell\openwemacs]
@="&Edit with Emacs"
[HKEY_CLASSES_ROOT\*\shell\openwemacs\command]
@="Absolute\\Path\\to\\your\\emacs\\bin\\emacsclientw.exe -n \"%1\""
[HKEY_CLASSES_ROOT\Directory\shell\openwemacs]
@="Edit &with Emacs"
[HKEY_CLASSES_ROOT\Directory\shell\openwemacs\command]
@="Absolute\\Path\\to\\your\\emacs\\bin\\emacsclientw.exe -n \"%1\""

更改emacs安装路径的路径;记得逃避“\”(只要你有\,将其改为\\)。

现在您需要做的就是在资源管理器中双击此* .reg文件,您将获得任何文件和任何目录的emacs的上下文菜单条目(如果您是一个狂热的粉丝!)。

请注意,要使其正常工作,必须启动emacs并且还必须启动emacs-server(M-x server-start)。我建议使用Windows启动emacs并将(server-start)放入.emacs文件中。

作为奖励,当您在Windows资源管理器中按ctrl-shift-enter时,以下自动密钥(http://www.autohotkey.com/)的代码段将启动在emacs中选择的文件。如果您在emacs中编辑大量文件但不一定要在emacs中导航到该文件,这可能会更方便。

#IfWinActive ahk_class CabinetWClass 
^+Enter::
  GetText(tmpvar)
  If (tmpvar != "")
     Run, d:/path/to/your/emacs/bin/dir/emacsclientw.exe -n "%tmpvar%"
Return
Return

答案 1 :(得分:14)

就像多语言的回答一样,但不需要启动服务器或任何混乱。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
[HKEY_CLASSES_ROOT\*\shell\openwemacs]
@="&Edit with Emacs"
[HKEY_CLASSES_ROOT\*\shell\openwemacs\command]
@="C:\\Program Files (x86)\\Emacs\\bin\\emacsclientw.exe --alternate-editor=\"C:\\Program Files (x86)\\Emacs\\bin\\runemacs.exe\" -n \"%1\""
[HKEY_CLASSES_ROOT\Directory\shell\openwemacs]
@="Edit &with Emacs"
[HKEY_CLASSES_ROOT\Directory\shell\openwemacs\command]
@="C:\\Program Files (x86)\\Emacs\\bin\\emacsclientw.exe --alternate-editor=\"C:\\Program Files (x86)\\Emacs\\bin\\runemacs.exe\" -n \"%1\""

答案 2 :(得分:5)

如果您没有注意使用注册表,可以从Windows资源管理器(任何编辑器的说明,而不仅仅是Emacs)执行此操作:

  1. 打开Windows资源管理器并选择Tools\Folder Options...菜单项。

  2. 单击File Types选项卡,然后选择要与编辑器关联的文件类型的扩展名。对于此示例,我将使用TXT扩展名。

  3. 单击详细信息框中的Advanced按钮以显示Edit File Type对话框。

  4. 您可以更改当前的open操作,也可以指定Open with MyEditor之类的新操作。

    如果您选择修改,请点击Edit...按钮,然后在Application used to peform action文本框中,输入编辑器的完整路径,然后点击"%1"。例如,C:\SciTe\wscite\SciTE.exe "%1"

    如果您要创建新操作,请点击New...按钮,为操作指定名称,然后提供编辑器的完整路径,然后是"%1"

  5. 如果要将操作设置为该文件类型的默认操作,请选择操作,然后单击Set Default按钮。

  6. 所有对话框中都有
  7. OK

  8. 另一种选择是在Send To文件夹%USERSPROFILE%\SendTo中放置编辑器可执行文件的快捷方式。我通常在这里创建一个名为“Editors”的新文件夹,并为我使用的各种编辑器添加快捷方式。

答案 3 :(得分:4)

稍加一点,也可以通过点击背景打开emacs中的当前目录。

<<<Code as posted by polyglot>>>

[HKEY_CLASSES_ROOT\Directory\Background\shell\openwemacs]
@="Open &with Emacs"
[HKEY_CLASSES_ROOT\Directory\Background\shell\openwemacs\command]
@="C:\\Program Files\\emacs-24.2\\bin\\runemacs.exe \"%V\""

此处%V是当前目录。在这种情况下,使用%1不起作用。

答案 4 :(得分:2)

This site解释了如何使用其他应用。只需改变路径就可以了。

创建此键/值:

[HKEY_CLASSES_ROOT\*\shell\Edit with AppName\command]
@=”\”C:\\Program Files\\Notepad2\\Notepad2.exe\” \”%1\”"

这是another reference,这更容易理解。

答案 5 :(得分:2)

使用Windows集成检查Emacs发行版:http://ourcomments.org/Emacs/EmacsW32.html

它的安装程序会创建一个资源管理器菜单项,可以执行您想要的操作。

答案 6 :(得分:2)

这是另一种做同样事情的方法。适用于WinXP和Vista。

将此添加到您的注册处:

修改与 - emacs.reg

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Emacs]
@="Edit With &Emacs"
[HKEY_CLASSES_ROOT\*\shell\Emacs\command]
@="Wscript.exe C:\\emacs\\emacs-22.3\\bin\\launch-emacs-client.vbs \"%1\""

将此文件放在emacs bin目录中:

发射-emacs的-client.vbs

Set objShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

If WScript.Arguments.Count = 1 Then

  strComputer = "."

  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

  Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")

  Dim isRunning
  isRunning = False

  For Each objItem in colItems
    If InStr(objItem.CommandLine, "emacs.exe") Then
      isRunning = True
    End If
  Next

  If isRunning Then
    objShell.Run(fso.GetParentFolderName(WScript.ScriptFullName) & "/emacsclientw.exe -n """ & WScript.Arguments(0) & """")
  Else
    objShell.Run(fso.GetParentFolderName(WScript.ScriptFullName) & "/runemacs.exe """ & WScript.Arguments(0) & """")
  End If

Else
  objShell.Run(fso.GetParentFolderName(WScript.ScriptFullName) & "/runemacs.exe")
End If

注意:W32 installer在安装时运行类似的脚本。

答案 7 :(得分:1)

我想在上面添加polyglot的答案 - 他提到的AutoHotkey快捷方式非常方便,但代码不完整:GetText()函数是由AutoHotkey论坛(http://www.autohotkey.com/forum/viewtopic.php?p=279576#279576)上的某人编写的,它是:

GetText(ByRef MyText = "")
{
   SavedClip := ClipboardAll
   Clipboard =
   Send ^c
   ClipWait 0.1
   If ERRORLEVEL
   {
      Clipboard := SavedClip
      MyText =
      ERRORLEVEL := 1
      Return
   }
   MyText := Clipboard
   Clipboard := SavedClip
   Return MyText
}

;to test: 
#k::
GetText(FileName)
msgbox clipboard=%FileName%
return

请注意,可能需要修改ClipWait延迟:我必须将其设置为2!