¿Cómo crear un acceso directo de shell de contexto de clic derecho & # 8220; editar con Emacs & # 8221 ;?
-
19-08-2019 - |
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.
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):
-
Abra el Explorador de Windows y seleccione el elemento de menú
Herramientas \ Opciones de carpeta ...
. -
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. -
Haga clic en el botón
Avanzado
en el cuadro de detalles para abrir el cuadro de diálogoEditar tipo de archivo
. -
Puede cambiar la acción actual
abrir
, o especificar una nueva acción comoAbrir con MyEditor
.Si elige editar, haga clic en el botón
Editar ...
y en el cuadro de textoAplicació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 "
. -
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
. 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!