Как создать контекстную оболочку правой кнопкой мыши для редактирования "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):
Откройте проводник 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
, Я обычно создаю новую папку здесь под названием "Редакторы" и ставлю ярлыки для различных редакторов, которые я использую.
С небольшим дополнением становится возможным также открыть текущий каталог в 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!