Подтвердить что ты не робот

Как создать ярлык контекстной оболочки контекстного меню "edit with Emacs"?

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

4b9b3361

Ответ 1

Вот что у меня есть - похоже на какой-то другой ответ. Создайте новый текстовый файл где-то под названием emacs-conextmenu.reg(или что-нибудь-вы-want.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-сервер (запуск сервера M-x). Я бы предложил запустить emacs с Windows и поместить (сервер-старт) в ваш файл .emacs.

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

Ответ 2

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

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

Ответ 3

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

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

  • Перейдите на вкладку File Types и выберите расширение для типа файла, который вы хотите связать с вашим редактором. В этом примере я буду использовать расширение TXT.

  • Нажмите кнопку Advanced в фрейме деталей, чтобы открыть диалоговое окно Edit File Type.

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Здесь другая ссылка, что немного легче выполнить.

Ответ 6

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

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

Ответ 7

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

Ответ 8

Я хочу добавить к ответу polyglot выше - ярлык 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!