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

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

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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 (инструкции для любого редактора, не только 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 в данном случае это не работает.

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

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

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

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

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

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

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

Я хочу добавить к ответу полиглота выше - упомянутый им ярлык 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top