engine-mode
engine-mode
Emacs의 전역 마이너 모드입니다. 검색 엔진을 쉽게 정의하고, 이를 키 바인딩에 바인딩하고, 편집기에서 편안하게 쿼리할 수 있습니다.
예를 들어 GitHub를 쉽게 검색할 수 있다고 가정해 보겠습니다.
(defengine github
" https://github.com/search?ref=simplesearch&q=%s " )
이는 대화형 함수인 engine/search-github
정의합니다. 실행되면 선택한 지역(또는 지역을 선택하지 않은 경우 입력하라는 메시지)을 가져와서 GitHub를 검색하여 기본 브라우저에 결과를 표시합니다.
defengine
매크로는 engine/keymap-prefix
(기본값은 Cx /
)가 붙은 선택적 키 조합을 사용할 수도 있습니다. 해당 키 바인딩은 kbd
호출로 래핑됩니다.
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:keybinding " d " )
Cx / d
이제 새로운 기능인 engine/search-duckduckgo
에 바인딩됩니다! 맵시 있는.
이 모드의 이유와 이유에 대한 비디오를 보려면 EmacsNYC에서 @hrs가 제공한 강연을 확인하세요.
engine-mode
MELPA에서 사용할 수 있습니다.
use-package
사용 :
( use-package engine-mode
:ensure t
:config
(engine-mode t ))
로드 경로에 추가하고 전역적으로 활성화하여 다른 elisp 파일처럼 설치할 수도 있습니다.
( require 'engine-mode )
(engine-mode t )
engine-mode
engine/browser-function
변수를 사용하여 구성한 URL을 여는 데 사용해야 하는 브라우저를 결정합니다. 기본 브라우저를 변경하려면, engine/browser-function
재정의하세요. 예를 들어 Emacs에 내장된 eww
브라우저를 항상 사용하려면 다음을 수행하십시오.
( setq engine/browser-function 'eww-browse-url )
engine/browser-function
기본값은 Emacs가 링크를 열기 위해 전역적으로 사용하는 browse-url-browser-function
입니다.
browse-url-browser-function
변수의 구현에는 가능한 브라우저 기능의 포괄적인 목록이 포함되어 있습니다. Ch v browse-url-browser-function <RETURN>
누르고 browse-url.el
링크를 따라가면 해당 내용을 확인할 수 있습니다.
단일 엔진에 대한 브라우저만 변경하려면 엔진을 정의할 때 :browser
키워드 인수를 사용하세요. 예를 들어 GitHub 검색 결과에만 eww
사용하려면 다음을 시도해 보세요.
(defengine github
" https://github.com/search?ref=simplesearch&q=%s "
:browser 'eww-browse-url )
앞서 언급한 대로 브라우저의 최종 목록을 보려면 browse-url-browser-function
구현을 참조하세요.
engine-mode
의 기본 키맵 접두사는 Cx /
입니다. 키맵을 추가 접두사(예: Cc s
)에 바인딩하려면 다음을 수행할 수 있습니다.
(engine/set-keymap-prefix ( kbd " C-c s " ))
use-package
사용하는 경우 다음을 사용하여 동일한 결과를 얻을 수 있습니다.
:bind-keymap ( " C-c s " . engine-mode-prefixed-map)
defengine
각 엔진에 합리적인 기본 독스트링을 할당하지만, 경우에 따라 :docstring
키워드 인수를 사용하여 이를 재정의할 수 있습니다:
(defengine ctan
" https://www.ctan.org/search/?x=1&PORTAL=on&phrase=%s "
:docstring " Search the Comprehensive TeX Archive Network (ctan.org) " )
엔진은 검색어를 URL에 삽입하기 전에 어떤 방식으로든 검색어를 변환하려고 할 수 있습니다. 어쩌면 용어의 인코딩이 달라야 하거나 대문자를 다르게 써야 하거나, 어, ROT13을 통과해야 할 수도 있습니다. 이유가 무엇이든 :term-transformation-hook
키워드 인수를 통해 defengine
에 함수를 전달하여 검색어에 사용자 지정 변환을 적용할 수 있습니다.
예를 들어 모든 DuckDuckGo 검색어를 대문자로 바꾸려면 다음을 수행하세요.
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:term-transformation-hook upcase)
또는 모든 쿼리가 latin-1로 인코딩되었는지 확인하려면 다음을 수행하세요.
(defengine diec2
" dlc.iec.cat/results.asp?txtEntrada=%s "
:term-transformation-hook ( lambda ( term ) ( encode-coding-string term latin-1))
:keybinding " c " )
또한 :term-transformation-hook
사용하여 접두사 인수가 주어졌을 때(예: 엔진을 호출하기 전에 Cu
입력하는 경우) 엔진이 다르게 작동하도록 할 수도 있습니다.
일부 검색 엔진은 검색 문자열을 큰따옴표로 묶어 정확한 구문에 대한 쿼리를 지원합니다. 이 경우 범용 인수가 있는 경우 대신 리터럴 검색을 수행하려면 변환이 유용할 수 있습니다.
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:term-transformation-hook ( lambda ( term ) ( if current-prefix-arg
( concat " " " term " " " )
term ))
:keybinding " d " )
Cx / d
입력하면 일반 검색이 수행되지만 Cu Cx / d
입력하면 검색하기 전에 쿼리를 따옴표로 묶습니다. 이는 해당 지역의 콘텐츠를 검색할 때 특히 유용합니다.
많은 브라우저가 엔진 모드와 동일한 형식을 사용하여(즉, 검색어를 표시하기 위해 URL에 %s
사용하여) 키워드 검색을 저장하므로 이를 Emacs로 가져오는 것이 그리 어렵지 않습니다.
@sshaw는 OS X의 Chrome에서 가져올 스크립트를 작성했습니다. 감사합니다!
webjump
와의 비교 Emacs에는 사용자가 일련의 URL을 정의하고, 여기에 검색어를 삽입하고, 브라우저에서 방문할 수 있도록 해주는 완벽하게 멋진 내장 webjump
패키지가 있습니다.
webjump
대신 engine-mode
사용하는 이유는 무엇입니까?
engine-mode
각 엔진에 대한 기능을 정의하므로 engine-mode
의 키 바인딩을 특정 검색과 직접 연결할 수 있습니다.eww
에서 다른 검색을 수행하려는 경우 engine-mode
에서는 쉽지 않습니다.engine-mode
의 사소한 UI 편의성을 좋아합니다. 예를 들어, 지역을 선택했다면 engine-mode
해당 지역을 검색 쿼리로 사용하고, webjump
이를 무시하고 빈 프롬프트를 제공합니다. 이러한 기능에 관심이 없다면 webjump
탁월한 선택입니다! 솔직히, engine-mode
의 작성자는 당시 webjump
존재한다는 것을 알았더라면 굳이 작성하지 않았을 것입니다. ?
(defengine amazon
" https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=%s " )
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:keybinding " d " )
(defengine github
" https://github.com/search?ref=simplesearch&q=%s " )
(defengine google
" https://www.google.com/search?ie=utf-8&oe=utf-8&q=%s "
:keybinding " g " )
(defengine google-images
" https://www.google.com/images?hl=en&source=hp&biw=1440&bih=795&gbv=2&aq=f&aqi=&aql=&oq=&q=%s " )
(defengine google-maps
" https://maps.google.com/maps?q=%s "
:docstring " Mappin' it up. " )
(defengine project-gutenberg
" https://www.gutenberg.org/ebooks/search/?query=%s " )
(defengine qwant
" https://www.qwant.com/?q=%s " )
(defengine stack-overflow
" https://stackoverflow.com/search?q=%s " )
(defengine twitter
" https://twitter.com/search?q=%s " )
(defengine wikipedia
" https://www.wikipedia.org/search-redirect.php?language=en&go=Go&search=%s "
:keybinding " w "
:docstring " Searchin' the wikis. " )
(defengine wiktionary
" https://www.wikipedia.org/search-redirect.php?family=wiktionary&language=en&go=Go&search=%s " )
(defengine wolfram-alpha
" https://www.wolframalpha.com/input/?i=%s " )
(defengine youtube
" https://www.youtube.com/results?aq=f&oq=&search_query=%s " )