Come creare un collegamento alla shell contestuale del tasto destro del mouse & # 8220; modifica con Emacs & # 8221 ;?
-
19-08-2019 - |
Domanda
Notepad ++ aggiunge automaticamente un collegamento alla shell in modo che quando sei in Windows Explorer, puoi fare clic con il pulsante destro del mouse su un file e selezionare " modifica con Notepad ++ " ;. Come posso fare lo stesso con emacs? Sto usando GNU Emacs 22.3 per Windows.
Soluzione
Ecco quello che ho - simile a qualche altra risposta. Crea un nuovo file di testo da qualche parte chiamato emacs-conextmenu.reg (o anything-you-want.reg) e incolla quanto segue in:
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\""
Cambia il percorso del tuo percorso di installazione di emacs; ricordati di sfuggire a " \ " (ogni volta che hai \, cambialo in \\).
Ora tutto ciò che devi fare è fare doppio clic su questo file * .reg in Explorer e avrai una voce di menu contestuale per emacs per qualsiasi file e directory (se sei un fan diretto!).
Nota per far funzionare tutto ciò, emacs deve essere avviato e anche emacs-server deve essere avviato (M-x server-start). Suggerirei di avviare emacs con Windows e di inserire (server-start) nel tuo file .emacs.
Come bonus, il seguente frammento di autohotkey ( http://www.autohotkey.com/ ) inizierà il file selezionato in emacs quando si preme ctrl-shift-invio in Windows Explorer. Questo potrebbe essere più utile se modifichi molti file in emacs ma non vuoi necessariamente passare al file in emacs stesso.
#IfWinActive ahk_class CabinetWClass
^+Enter::
GetText(tmpvar)
If (tmpvar != "")
Run, d:/path/to/your/emacs/bin/dir/emacsclientw.exe -n "%tmpvar%"
Return
Return
Altri suggerimenti
Proprio come la risposta di Polyglot, ma non è necessario avviare un server o alcuno di questi problemi.
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\""
Se non sei pronto per spelunking il registro, puoi farlo da Windows Explorer (istruzioni per qualsiasi editor, non solo Emacs):
-
Apri Esplora risorse e seleziona la voce di menu
Strumenti \ Cartella ...
. -
Fai clic sulla scheda
Tipi di file
e seleziona l'estensione per il tipo di file che desideri associare al tuo editor. Per questo esempio, userò l'estensione TXT. -
Fai clic sul pulsante
Avanzate
nel riquadro dei dettagli per visualizzare la finestra di dialogoModifica tipo di file
. -
Puoi modificare l'azione
apri
corrente o specificare una nuova azione comeApri con MyEditor
.Se scegli di modificare, fai clic sul pulsante
Modifica ...
e nella casella di testoApplicazione utilizzata per eseguire l'azione
, inserisci il percorso completo del tuo editor, seguito da"% 1 "
. Ad esempio,C: \ SciTe \ wscite \ SciTE.exe "% 1 "
.Se vuoi creare una nuova azione, fai clic sul pulsante
New ...
, dai un nome all'azione e dai il percorso completo al tuo editor, seguito da"% 1 "
. -
Se si desidera impostare un'azione come predefinita per quel tipo di file, selezionare l'azione, quindi fare clic sul pulsante
Imposta predefinito
. OK
da tutte le finestre di dialogo.
Un'altra opzione sarebbe quella di mettere un collegamento all'eseguibile dell'editor nella cartella Invia a
, % USERSPROFILE% \ SendTo
. Di solito creo una nuova cartella qui chiamata " Editor " e scorciatoie per i vari editor che uso.
Con una piccola aggiunta, diventa possibile anche aprire la directory corrente in emacs facendo clic sullo sfondo.
<<<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\""
Qui % V
è la directory corrente. L'uso di % 1
non funziona in questo caso.
Questo sito spiega come farlo con un'altra app. Basta cambiare il percorso e dovresti essere pronto.
Crea questa chiave / valore:
[HKEY_CLASSES_ROOT\*\shell\Edit with AppName\command]
@=”\”C:\\Program Files\\Notepad2\\Notepad2.exe\” \”%1\”"
Ecco un altro riferimento , che è un po 'più facile da seguire.
Scopri una distribuzione Emacs con l'integrazione di Windows: http://ourcomments.org/Emacs/EmacsW32. html
Il suo programma di installazione crea una voce di menu Explorer che fa ciò che vuoi.
Ecco un altro modo di fare la stessa cosa. Funziona con WinXP e Vista.
Aggiungi questo al tuo registro:
modifica-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\""
Metti questo file nella tua cartella bin di emacs:
di lancio-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: programma di installazione W32 esegue uno script simile al momento dell'installazione.
Voglio aggiungere la risposta di Polyglot sopra: il collegamento AutoHotkey che menziona è molto utile, ma il codice è incompleto: la funzione GetText () è stata scritta da qualcuno nel forum AutoHotkey ( http://www.autohotkey.com/forum/viewtopic.php?p=279576#279576 ), ed è:
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
Nota che potrebbe essere necessario modificare il ritardo di ClipWait: ho dovuto impostarlo su 2!