Notepad ++ автоматически добавляет ярлык оболочки, поэтому, когда вы находитесь в Проводнике Windows, вы можете щелкнуть правой кнопкой мыши по файлу и выбрать "редактировать с помощью Notepad ++". Как я могу сделать то же самое с emacs? Я использую GNU Emacs 22.3 для Windows.
Как создать ярлык контекстной оболочки контекстного меню "edit with Emacs"?
Ответ 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!