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
ใหม่ ตัวอย่างเช่น หากต้องการใช้เบราว์เซอร์ eww
ในตัวของ Emacs เสมอ:
( 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
เมื่อคุณกำหนดเอ็นจิ้น ตัวอย่างเช่น หากต้องการใช้ eww
สำหรับผลการค้นหา GitHub ของคุณเท่านั้น ให้ลอง:
(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 ไม่ว่าจะด้วยเหตุผลใดก็ตาม คุณสามารถใช้การแปลงแบบกำหนดเองกับข้อความค้นหาได้โดยการส่งฟังก์ชันเพื่อ defengine
ผ่านอาร์กิวเมนต์คำหลัก :term-transformation-hook
ตัวอย่างเช่น หากต้องการ UPCASE การค้นหา 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
จะล้อมข้อความค้นหาของคุณด้วยเครื่องหมายคำพูดก่อนที่จะค้นหา ซึ่งมีประโยชน์อย่างยิ่งเมื่อค้นหาเนื้อหาของภูมิภาค
เนื่องจากเบราว์เซอร์จำนวนมากบันทึกการค้นหาคำหลักโดยใช้รูปแบบเดียวกับโหมดเครื่องยนต์ (นั่นคือโดยใช้ %s
ใน url เพื่อระบุคำค้นหา) จึงไม่ใช่เรื่องยากเกินไปที่จะนำเข้าเข้าสู่ Emacs
@sshaw ได้เขียนสคริปต์เพื่อนำเข้าจาก Chrome บน OS X ขอบคุณสำหรับสิ่งนั้น!
webjump
Emacs มีแพ็คเกจ webjump
ในตัวที่น่ารักอย่างสมบูรณ์แบบซึ่งช่วยให้ผู้ใช้สามารถกำหนดชุด URL สอดแทรกคำค้นหาลงใน URL และเยี่ยมชมพวกเขาในเบราว์เซอร์
ทำไมคุณถึงใช้ engine-mode
แทน webjump
?
engine-mode
กำหนดฟังก์ชันสำหรับเครื่องยนต์แต่ละตัว การผูกคีย์ใน engine-mode
จึงสามารถเชื่อมโยงโดยตรงกับการค้นหาเฉพาะได้eww
นั่นไม่ใช่เรื่องเล็กน้อยใน engine-mode
engine-mode
ตัวอย่างเช่น หากคุณได้เลือกภูมิภาค 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 " )