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

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

Ответы [ 8 ]

29 голосов
/ 18 января 2009

Вот что у меня есть - похоже на какой-то другой ответ. Создайте новый текстовый файл где-нибудь с именем 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 для любого файла и любого каталога (если вы являетесь поклонником Dired!).

Обратите внимание, что для этого нужно запустить emacs и также запустить emacs-server (M-x 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
14 голосов
/ 11 апреля 2012

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

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\""
5 голосов
/ 18 января 2009

Если вы не готовы записать реестр, вы можете сделать это из 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. Я обычно создаю новую папку здесь под названием «Редакторы» и ставлю ярлыки для различных редакторов, которые я использую.

4 голосов
/ 19 марта 2013

С небольшим дополнением становится возможным также открыть текущий каталог в 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 в этом случае не работает.

2 голосов
/ 27 января 2009

Вот еще один способ сделать то же самое. Работает в 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:

запуск-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 запускает аналогичный сценарий при установке.

2 голосов
/ 18 января 2009

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

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

2 голосов
/ 18 января 2009

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

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

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

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

1 голос
/ 05 июля 2009

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

...