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
にバインドされました。気の利いた。
このモードの理由と理由に関するビデオを見たい場合は、@hrs が EmacsNYC で行った講演をチェックしてください。
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
デフォルトはbrowse-url-browser-function
であり、Emacsはリンクを開くためにグローバルに使用します。
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 を割り当てますが、 :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 " )