Как создать контекстную оболочку правой кнопкой мыши для редактирования "Emacs"?

Notepad++ автоматически добавляет ярлык оболочки, поэтому, находясь в проводнике Windows, вы можете щелкнуть правой кнопкой мыши файл и выбрать "редактировать с помощью Notepad++". Как я могу сделать то же самое с Emacs? Я использую GNU Emacs 22.3 для Windows.

8 ответов

Решение

Вот что у меня есть - похоже на какой-то другой ответ. Создайте где-нибудь новый текстовый файл с именем emacs-conextmenu.reg (или что-то еще, что вы хотите. Reg) и вставьте в него следующее:

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

Измените путь на ваш путь установки emacs; не забудьте экранировать "\" (если у вас есть \, измените его на \\).

Теперь все, что вам нужно сделать, это дважды щелкнуть по этому файлу *.reg в проводнике, и у вас будет пункт контекстного меню для emacs для любого файла и любого каталога (если вы фанат!).

Обратите внимание, что для этого нужно запустить emacs и запустить emacs-сервер (Mx server-start). Я бы предложил запустить emacs с Windows и поместить (server-start) в ваш файл.emacs.

В качестве бонуса следующий фрагмент для autohotkey ( http://www.autohotkey.com/) запустит файл, выбранный в emacs, когда вы нажмете ctrl-shift-enter в проводнике Windows. Это может быть более удобно, если вы редактируете много файлов в emacs, но не обязательно хотите перейти к файлу в самом emacs.

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

Точно так же, как ответ Полиглота, но не нужно запускать сервер или что-то в этом роде.

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

Если вы не готовы навести порядок в реестре, вы можете сделать это из Windows Explorer (инструкции для любого редактора, а не только для Emacs):

  1. Откройте проводник Windows и выберите Tools\Folder Options... пункт меню.

  2. Нажми на File Types и выберите расширение для типа файла, который вы хотите связать с вашим редактором. Для этого примера я буду использовать расширение TXT.

  3. Нажмите на Advanced кнопка в рамке сведений, чтобы вызвать Edit File Type Диалог.

  4. Вы можете изменить текущий open действие или укажите новое действие, например Open with MyEditor,

    Если вы решите редактировать, нажмите Edit... кнопка и в Application used to peform action текстовое поле, введите полный путь к редактору, а затем "%1", Например, C:\SciTe\wscite\SciTE.exe "%1",

    Если вы хотите создать новое действие, нажмите New... Нажмите кнопку, введите имя действия и укажите полный путь к редактору, а затем "%1",

  5. Если вы хотите сделать действие по умолчанию для этого типа файла, выберите действие, затем щелкните Set Default кнопка.

  6. OK из всех диалогов.

Другим вариантом будет поставить ярлык на исполняемый файл вашего редактора в вашем Send To папка, %USERSPROFILE%\SendTo, Я обычно создаю новую папку здесь под названием "Редакторы" и ставлю ярлыки для различных редакторов, которые я использую.

С небольшим дополнением становится возможным также открыть текущий каталог в emacs, нажав на фон.

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

Вот %V это текущий каталог. С помощью %1 не работает в этом случае.

Вот еще один способ сделать то же самое. Работает в WinXP и Vista.

Добавьте это в свой регистр:

редактировать-с-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\""

Поместите этот файл в ваш каталог emacs bin:

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

Примечание: установщик W32 запускает аналогичный скрипт при установке.

Ознакомьтесь с дистрибутивом Emacs с интеграцией Windows: http://ourcomments.org/Emacs/EmacsW32.html

Его установщик создает пункт меню Explorer, который делает то, что вы хотите.

Этот сайт объясняет, как сделать это с другим приложением. Просто измените путь, и у вас все будет готово.

Создайте этот ключ / значение:

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

Вот еще одна ссылка, за которой немного легче следовать.

Я хочу добавить к ответу полиглота выше - ярлык AutoHotkey, который он упоминает, очень удобен, но код неполон: функция GetText() была написана кем-то на форуме AutoHotkey ( http://www.autohotkey.com/forum/viewtopic.php?p=279576), и это:

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

Обратите внимание, что задержка ClipWait может потребоваться изменить: я должен был установить ее на 2!

Другие вопросы по тегам