2009-01-18 12 views
23

Notepad ++ agrega automáticamente un atajo de shell para que cuando esté en el Explorador de Windows, puede hacer clic con el botón derecho en un archivo y seleccionar "editar con Notepad ++". ¿Cómo puedo hacer lo mismo con emacs? Estoy usando GNU Emacs 22.3 para Windows.¿Cómo crear un atajo contextual de shell con el botón derecho "editar con Emacs"?

+0

¡Parece extraño querer un enfoque impulsado por el ratón (principalmente) para lanzar un editor de teclado pesado! ¿No utilizas la consola? –

+2

en absoluto. La buena productividad proviene de mezclar correctamente el teclado y el mouse. Ser capaz de ejecutar Emacs desde Windows Explorer es útil para muchas personas. – LRMAAX

Respuesta

28

Esto es lo que tengo, similar a alguna otra respuesta. Crear un nuevo archivo de texto en alguna llamada Emacs-conextmenu.reg (o nada-que-want.reg) y pegue el siguiente en:

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\"" 

Cambiar la ruta de la ruta de instalación emacs; recuerde escapar de la "\" (siempre que tenga \, cámbielo a \\).

Ahora todo lo que tiene que hacer es hacer doble clic en este archivo * .reg en el explorador y tendrá una entrada en el menú contextual de emacs para cualquier archivo y directorio (¡si es fanático!).

Tenga en cuenta que para que esto funcione, debe iniciarse emacs y también debe iniciarse emacs-server (inicio de servidor M-x). Sugeriría iniciar emacs con Windows y poner (server-start) en su archivo .emacs.

Como beneficio adicional, el siguiente fragmento para autohotkey (http://www.autohotkey.com/) iniciará el archivo seleccionado en emacs al presionar ctrl-shift-enter en el explorador de Windows. Esto podría ser más útil si edita muchos archivos en emacs, pero no necesariamente quiere navegar al archivo en emacs.

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

Es posible que desee reemplazar% 1 con% L, de lo contrario, Windows proporcionará Emacs con el nombre corto del archivo. Vea esta pregunta: http://stackoverflow.com/questions/892934/emacsw32-renames-buffers-with-old-windows-shortoured-file-names – Leonel

+0

¡Gran respuesta! Sin embargo, ¿algún experto de Emacs puede ir más allá y mostrar cómo construir y ejecutar el archivo .reg en Emacs ... incluyendo la ruta absoluta a emacs? Todavía soy un novato, pero apuesto a que un profesional de Emacs podría hacer esto realmente fácil.¿Dije cuánto me gusta Emacs? – User1

+0

También vale la pena mencionar que es posible que necesite reiniciar o detener/reiniciar explorer.exe como se menciona aquí http://www.pctools.com/forum/showthread.php?38853-apply-registry-without-reboot-computer – joefromct

2

This site explica cómo hacerlo con otra aplicación. Solo cambia la ruta y deberías estar todo listo.

de crear esta clave/valor:

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

Aquí es another reference, que es un poco más fácil de seguir.

5

Si no está listo para la espeleología registro, puede hacerlo desde el Explorador de Windows (instrucciones de cualquier editor, no sólo Emacs):

  1. Abra el Explorador de Windows y seleccione el menú Tools\Folder Options... ít.

  2. Haga clic en la pestaña File Types y seleccione la extensión para el tipo de archivo que desea asociar con su editor. Para este ejemplo, usaré la extensión TXT.

  3. Haga clic en el botón Advanced en el recuadro de detalles para que aparezca el cuadro de diálogo Edit File Type.

  4. Puede cambiar la acción actual open o especificar una acción nueva como Open with MyEditor.

    Si elige editar, haga clic en el botón Edit... y en el cuadro de texto Application used to peform action, ponga la ruta completa a su editor, seguido de "%1". Por ejemplo, C:\SciTe\wscite\SciTE.exe "%1".

    Si desea crear una nueva acción, haga clic en el botón New..., asigne un nombre a la acción y proporcione la ruta completa a su editor, seguido de "%1".

  5. Si desea realizar una acción predeterminada para ese tipo de archivo, seleccione la acción, luego haga clic en el botón Set Default.

  6. OK de todos los cuadros de diálogo.

Otra opción sería poner un acceso directo al ejecutable del editor en la carpeta de Send To, %USERSPROFILE%\SendTo. Normalmente creo una nueva carpeta llamada "Editores" y pongo accesos directos a los diversos editores que uso.

2

Aquí hay otra forma de hacer lo mismo. Funciona en WinXP y Vista.

Agregar a su registery:

edit-con-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\"" 

Coloque este archivo en el directorio bin emacs:

lanzamiento-emacs-cliente. 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 

Nota: el W32 installer ejecuta un script similar en la instalación.

1

Quiero agregar a la respuesta de polyglot anterior - el acceso directo de AutoHotkey que menciona es muy útil, pero el código está incompleto: la función GetText() fue escrita por alguien en el foro AutoHotkey (http://www.autohotkey.com/forum/viewtopic.php?p=279576#279576), y es:

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 

Tenga en cuenta que ClipWait retraso podría ser necesario modificar: tuve que configurarlo para 2!

13

Al igual que la respuesta de polyglot, pero no hay necesidad de iniciar un servidor o cualquier otro desastre.

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\"" 
+1

También puede especificar el icono agregando la línea '" icono "=" C: \\ Archivos de programa (x86) \\ Emacs \\ bin \\ emacsclientw.exe "' justo debajo de la línea con '@ =" Editar & con Emacs "' – LRMAAX

4

Con un poco de adición, también es posible abrir el directorio actual en emacs haciendo clic en el fondo.

<<<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\"" 

Aquí %V es el directorio actual. Usar %1 no funciona en este caso.

Cuestiones relacionadas