engine-mode
engine-mode
adalah mode minor global untuk Emacs. Ini memungkinkan Anda dengan mudah mendefinisikan mesin pencari, mengikatnya ke pengikatan kunci, dan menanyakannya dari kenyamanan editor Anda.
Misalnya, kita ingin dapat mencari di GitHub dengan mudah:
(defengine github
" https://github.com/search?ref=simplesearch&q=%s " )
Ini mendefinisikan fungsi interaktif engine/search-github
. Saat dijalankan, ia akan mengambil wilayah yang dipilih (atau meminta input, jika tidak ada wilayah yang dipilih) dan mencarinya di GitHub, menampilkan hasilnya di browser default Anda.
Makro defengine
juga dapat menggunakan kombinasi tombol opsional, yang diawali dengan engine/keymap-prefix
(yang defaultnya adalah Cx /
). Pengikatan kunci itu akan dibungkus dengan panggilan ke kbd
.
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:keybinding " d " )
Cx / d
sekarang terikat ke fungsi baru engine/search-duckduckgo
! Bagus.
Jika Anda ingin melihat video tentang alasan dan alasan mode ini, lihat ceramah @hrs di EmacsNYC.
engine-mode
tersedia di MELPA.
Menggunakan use-package
:
( use-package engine-mode
:ensure t
:config
(engine-mode t ))
Anda juga dapat menginstalnya seperti file elisp lainnya dengan menambahkannya ke jalur pemuatan Anda dan mengaktifkannya secara global:
( require 'engine-mode )
(engine-mode t )
engine-mode
menggunakan variabel engine/browser-function
untuk menentukan browser mana yang harus digunakan untuk membuka URL yang dibuatnya. Untuk mengubah browser default, definisikan ulang engine/browser-function
. Misalnya, untuk selalu menggunakan browser eww
bawaan Emacs:
( setq engine/browser-function 'eww-browse-url )
engine/browser-function
defaultnya adalah browse-url-browser-function
, yang digunakan Emacs secara global untuk membuka tautan.
Implementasi variabel browse-url-browser-function
berisi daftar lengkap kemungkinan fungsi browser. Anda dapat melakukannya dengan menekan Ch v browse-url-browser-function <RETURN>
dan mengikuti tautan ke browse-url.el
.
Untuk hanya mengubah browser untuk satu mesin, gunakan argumen kata kunci :browser
saat Anda mendefinisikan mesin. Misalnya, untuk menggunakan eww
hanya untuk hasil pencarian GitHub Anda, coba:
(defengine github
" https://github.com/search?ref=simplesearch&q=%s "
:browser 'eww-browse-url )
Seperti yang telah disebutkan, lihat implementasi browse-url-browser-function
untuk daftar browser yang pasti.
Awalan keymap default untuk engine-mode
adalah Cx /
. Jika Anda ingin mengikat peta kunci ke awalan tambahan (misalnya, Cc s
), Anda benar-benar dapat:
(engine/set-keymap-prefix ( kbd " C-c s " ))
Jika Anda menggunakan use-package
, Anda dapat mencapai hal yang sama dengan:
:bind-keymap ( " C-c s " . engine-mode-prefixed-map)
defengine
memberikan docstring default yang wajar pada setiap mesin, namun Anda dapat menggantinya berdasarkan kasus per kasus dengan argumen kata kunci :docstring
:
(defengine ctan
" https://www.ctan.org/search/?x=1&PORTAL=on&phrase=%s "
:docstring " Search the Comprehensive TeX Archive Network (ctan.org) " )
Mesin mungkin ingin mengubah istilah penelusuran dengan cara tertentu sebelum menginterpolasi istilah tersebut ke dalam URL. Mungkin istilah tersebut harus memiliki pengkodean yang berbeda, atau menggunakan huruf kapital yang berbeda, atau, eh, diteruskan melalui ROT13. Apa pun alasannya, Anda dapat menerapkan transformasi khusus pada istilah penelusuran dengan meneruskan fungsi ke defengine
melalui argumen kata kunci :term-transformation-hook
.
Misalnya, untuk UPCASE semua pencarian DuckDuckGo Anda:
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:term-transformation-hook upcase)
Atau, untuk memastikan bahwa semua pertanyaan Anda dikodekan sebagai latin-1:
(defengine diec2
" dlc.iec.cat/results.asp?txtEntrada=%s "
:term-transformation-hook ( lambda ( term ) ( encode-coding-string term latin-1))
:keybinding " c " )
Anda juga dapat menggunakan :term-transformation-hook
untuk membuat mesin berperilaku berbeda ketika diberi argumen awalan (yaitu mengetikkan Cu
sebelum memanggil mesin).
Beberapa mesin pencari mendukung pembuatan kueri untuk frasa yang tepat dengan mengapit string pencarian dengan tanda kutip ganda. Transformasi dapat berguna dalam kasus ini untuk melakukan pencarian literal jika ada argumen universal:
(defengine duckduckgo
" https://duckduckgo.com/?q=%s "
:term-transformation-hook ( lambda ( term ) ( if current-prefix-arg
( concat " " " term " " " )
term ))
:keybinding " d " )
Mengetik Cx / d
akan melakukan pencarian biasa, tetapi mengetik Cu Cx / d
akan membungkus kueri Anda dengan tanda kutip sebelum mencarinya. Ini sangat berguna saat mencari konten di wilayah tersebut.
Karena banyak browser menyimpan pencarian kata kunci menggunakan format yang sama dengan mode mesin (yaitu, dengan menggunakan %s
dalam url untuk menunjukkan istilah pencarian), tidak terlalu sulit untuk mengimpornya ke Emacs.
@sshaw telah menulis skrip untuk diimpor dari Chrome di OS X. Terima kasih untuk itu!
webjump
Emacs memiliki paket webjump
bawaan yang sangat bagus yang memungkinkan pengguna menentukan sekumpulan URL, menginterpolasi istilah pencarian ke dalamnya, dan mengunjunginya di browser.
Mengapa Anda menggunakan engine-mode
-alih webjump
?
engine-mode
mendefinisikan fungsi untuk setiap mesin, pengikatan tombol dalam engine-mode
dapat dikaitkan langsung dengan pencarian tertentu.eww
, itu sepele dalam engine-mode
.engine-mode
. Jika Anda memilih wilayah, misalnya, engine-mode
akan menggunakannya sebagai permintaan pencarian, sementara webjump
akan mengabaikannya dan menawarkan prompt kosong. Jika Anda tidak tertarik dengan fitur-fitur ini, webjump
adalah pilihan yang tepat! Sejujurnya, penulis engine-mode
mungkin tidak akan repot-repot menulisnya jika mereka tahu webjump
ada pada saat itu. ?
(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 " )