Come creare un collegamento alla shell contestuale del tasto destro del mouse & # 8220; modifica con Emacs & # 8221 ;?

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

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.

È stato utile?

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):

  1. Apri Esplora risorse e seleziona la voce di menu Strumenti \ Cartella ... .

  2. 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.

  3. Fai clic sul pulsante Avanzate nel riquadro dei dettagli per visualizzare la finestra di dialogo Modifica tipo di file .

  4. Puoi modificare l'azione apri corrente o specificare una nuova azione come Apri con MyEditor .

    Se scegli di modificare, fai clic sul pulsante Modifica ... e nella casella di testo Applicazione 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 " .

  5. Se si desidera impostare un'azione come predefinita per quel tipo di file, selezionare l'azione, quindi fare clic sul pulsante Imposta predefinito .

  6. 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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top