¿Cómo crear un acceso directo de shell de contexto de clic derecho & # 8220; editar con Emacs & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/455077

Pregunta

Notepad ++ agrega automáticamente un acceso directo de shell para que cuando esté en el Explorador de Windows, pueda hacer clic 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.

¿Fue útil?

Solución

Esto es lo que tengo, similar a alguna otra respuesta. Cree un nuevo archivo de texto en algún lugar llamado emacs-conextmenu.reg (o cualquier cosa que desee) y pegue lo 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\""

Cambie la ruta a su ruta de instalación de emacs; recuerde escapar del " \ " (siempre que tenga \, cambie eso a \\).

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

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

Como beneficio adicional, el siguiente fragmento de autohotkey ( http://www.autohotkey.com/ ) iniciará el archivo seleccionado en emacs cuando presione 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

Otros consejos

Al igual que la respuesta de Polyglot, pero no es necesario iniciar un servidor ni nada de eso.

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

Si no está preparado para escribir el registro, puede hacerlo desde el Explorador de Windows (instrucciones para cualquier editor, no solo Emacs):

  1. Abra el Explorador de Windows y seleccione el elemento de menú Herramientas \ Opciones de carpeta ... .

  2. Haga clic en la pestaña Tipos de archivo 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 Avanzado en el cuadro de detalles para abrir el cuadro de diálogo Editar tipo de archivo .

  4. Puede cambiar la acción actual abrir , o especificar una nueva acción como Abrir con MyEditor .

    Si elige editar, haga clic en el botón Editar ... y en el cuadro de texto Aplicación utilizada para realizar acciones , coloque 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 asigne la ruta completa a su editor, seguido de "% 1 " .

  5. Si desea que una acción sea la predeterminada para ese tipo de archivo, seleccione la acción y luego haga clic en el botón Establecer predeterminado .

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

Otra opción sería poner un acceso directo al ejecutable de su editor en su carpeta Enviar a , % USERSPROFILE% \ SendTo . Por lo general, creo una nueva carpeta aquí llamada "Editores" y poner atajos a los distintos editores que uso.

Con una pequeña 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.

Este sitio explica cómo hacerlo con otra aplicación. Simplemente cambie la ruta y debería estar listo.

Cree esta clave / valor:

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

Aquí está otra referencia , que es un poco más fácil de seguir.

Consulte una distribución de Emacs con integración de Windows: http://ourcomments.org/Emacs/EmacsW32. html

Su instalador crea una entrada de menú del Explorador que hace lo que desea.

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

Agregue esto a su registro:

edit-with-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 su directorio bin de emacs:

launch-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

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

Quiero agregar a la respuesta de Polyglot anterior: el acceso directo de AutoHotkey que menciona es muy útil, pero el código está incompleto: alguien escribió la función GetText () en el foro de 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 es posible que sea necesario modificar el retraso de ClipWait: ¡tuve que configurarlo en 2!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top