Как создать контекстный ярлык контекстной оболочки, вызываемый правой кнопкой мыши, “редактировать с помощью Emacs”?
-
19-08-2019 - |
Вопрос
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).:
Откройте проводник 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
в данном случае это не работает.
Этот сайт объясняет, как это сделать с помощью другого приложения.Просто измените путь, и у вас все должно быть готово.
Создайте этот ключ / значение:
[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!