From 7ce23ab00a476a451f9bc281824dd0ca5e329e2e Mon Sep 17 00:00:00 2001 From: Andreas Gerler Date: Tue, 14 Jul 2015 23:08:52 +0200 Subject: [PATCH] new version of engine-mode. --- bba.org | 10 +-- .../engine-mode-pkg.el | 1 - .../engine-mode-autoloads.el | 8 +- .../engine-mode-pkg.el | 1 + .../engine-mode.el | 76 +++++++++++++------ 5 files changed, 61 insertions(+), 35 deletions(-) delete mode 100644 elpa/engine-mode-20150323.2148/engine-mode-pkg.el rename elpa/{engine-mode-20150323.2148 => engine-mode-20150613.759}/engine-mode-autoloads.el (61%) create mode 100644 elpa/engine-mode-20150613.759/engine-mode-pkg.el rename elpa/{engine-mode-20150323.2148 => engine-mode-20150613.759}/engine-mode.el (61%) diff --git a/bba.org b/bba.org index 075049f7..2aede680 100644 --- a/bba.org +++ b/bba.org @@ -197,27 +197,27 @@ search the web on your fingertips. C-c /. (defengine amazon "http://www.amazon.de/s/ref=nb_sb_noss?url=search-alias%3Daps&filed-keywords=%s" - "a" + :keybinding "a" ) (defengine bing "http://www.bing.com/search?q=%s&qs=bs&form=QBLH" - "b" + :keybinding "b" ) (defengine google-maps "http://maps.google.com/maps?q=%s" - "m" + :keybinding "m" ) (defengine wikipedia "http://www.wikipedia.org/search-redirect.php?language=en&go=Go&search=%s" - "w" + :keybinding "w" ) (defengine youtube "http://www.youtube.com/results?aq=f&oq=&search_query=%s" - "y" + :keybinding "y" ) (engine-mode 1) ) diff --git a/elpa/engine-mode-20150323.2148/engine-mode-pkg.el b/elpa/engine-mode-20150323.2148/engine-mode-pkg.el deleted file mode 100644 index fd5f1b1a..00000000 --- a/elpa/engine-mode-20150323.2148/engine-mode-pkg.el +++ /dev/null @@ -1 +0,0 @@ -(define-package "engine-mode" "20150323.2148" "Define and query search engines from within Emacs." (quote nil)) diff --git a/elpa/engine-mode-20150323.2148/engine-mode-autoloads.el b/elpa/engine-mode-20150613.759/engine-mode-autoloads.el similarity index 61% rename from elpa/engine-mode-20150323.2148/engine-mode-autoloads.el rename to elpa/engine-mode-20150613.759/engine-mode-autoloads.el index ac95c9e9..8b232e7d 100644 --- a/elpa/engine-mode-20150323.2148/engine-mode-autoloads.el +++ b/elpa/engine-mode-20150613.759/engine-mode-autoloads.el @@ -1,18 +1,16 @@ ;;; engine-mode-autoloads.el --- automatically extracted autoloads ;; ;;; Code: - +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) -;;;### (autoloads nil nil ("engine-mode-pkg.el" "engine-mode.el") -;;;;;; (21833 2755 502002 0)) +;;;### (autoloads nil nil ("engine-mode.el") (21908 14283 563938 +;;;;;; 0)) ;;;*** -(provide 'engine-mode-autoloads) ;; Local Variables: ;; version-control: never ;; no-byte-compile: t ;; no-update-autoloads: t -;; coding: utf-8 ;; End: ;;; engine-mode-autoloads.el ends here diff --git a/elpa/engine-mode-20150613.759/engine-mode-pkg.el b/elpa/engine-mode-20150613.759/engine-mode-pkg.el new file mode 100644 index 00000000..28d48c5b --- /dev/null +++ b/elpa/engine-mode-20150613.759/engine-mode-pkg.el @@ -0,0 +1 @@ +(define-package "engine-mode" "20150613.759" "Define and query search engines from within Emacs." 'nil :url "https://github.com/hrs/engine-mode/engine-mode.el") diff --git a/elpa/engine-mode-20150323.2148/engine-mode.el b/elpa/engine-mode-20150613.759/engine-mode.el similarity index 61% rename from elpa/engine-mode-20150323.2148/engine-mode.el rename to elpa/engine-mode-20150613.759/engine-mode.el index 12be4a76..16e8f8a3 100644 --- a/elpa/engine-mode-20150323.2148/engine-mode.el +++ b/elpa/engine-mode-20150613.759/engine-mode.el @@ -1,8 +1,8 @@ ;;; engine-mode.el --- Define and query search engines from within Emacs. ;; Author: Harry R. Schwartz -;; Version: 2015.02.07 -;; Package-Version: 20150323.2148 +;; Version: 2015.06.13 +;; Package-Version: 20150613.759 ;; URL: https://github.com/hrs/engine-mode/engine-mode.el ;; This file is NOT part of GNU Emacs. @@ -24,11 +24,11 @@ ;; results in your default browser. ;; The `defengine' macro can also take an optional key combination, -;; prefixed with `engine/keymap-prefix' (which defaults to "C-c /"): +;; prefixed with "C-c /": ;; (defengine duckduckgo ;; "https://duckduckgo.com/?q=%s" -;; "d") +;; :keybinding "d") ;; `C-c / d' is now bound to the new function ;; engine/search-duckduckgo'! Nifty. @@ -51,17 +51,30 @@ ;;; Code: (eval-when-compile (require 'cl)) +(defvar engine-mode-map (make-sparse-keymap)) +(defvar engine-mode-prefixed-map (make-sparse-keymap)) + (define-minor-mode engine-mode "Minor mode for defining and querying search engines through Emacs. \\{engine-mode-map}" :global t - :keymap (make-sparse-keymap)) + :keymap engine-mode-map) + +(defun engine/set-keymap-prefix (prefix-key) + "Bind the engine-mode keymap to a new prefix. +For example, to use \"C-c s\" instead of the default \"C-c /\": + +(engine/set-keymap-prefix (kbd \"C-c s\"))" + (define-key engine-mode-map prefix-key engine-mode-prefixed-map)) + +(engine/set-keymap-prefix (kbd "C-c /")) -(defcustom engine/keymap-prefix (kbd "C-c /") - "Engine-mode keymap prefix." +(defcustom engine/browser-function browse-url-browser-function + "The default browser function used when opening a URL in an engine. +Defaults to `browse-url-browser-function'." :group 'engine-mode - :type 'string) + :type 'symbol) (defun engine/search-prompt (engine-name) (concat "Search " (capitalize engine-name) ": ")) @@ -75,12 +88,13 @@ (buffer-substring (region-beginning) (region-end)) (engine/prompted-search-term engine-name))) -(defun engine/execute-search (search-engine-url search-term) +(defun engine/execute-search (search-engine-url browser-function search-term) "Display the results of the query." (interactive) - (browse-url - (format search-engine-url - (url-hexify-string search-term)))) + (let ((browse-url-browser-function browser-function)) + (browse-url + (format search-engine-url + (url-hexify-string search-term))))) (defun engine/function-name (engine-name) (intern (concat "engine/search-" (downcase (symbol-name engine-name))))) @@ -90,31 +104,45 @@ (capitalize (symbol-name engine-name)) " for the selected text. Prompt for input if none is selected.")) -(defun engine/scope-keybinding (keybinding) - (concat engine/keymap-prefix " " keybinding)) - (defun engine/bind-key (engine-name keybinding) (when keybinding - `(define-key engine-mode-map (kbd ,(engine/scope-keybinding keybinding)) + `(define-key engine-mode-prefixed-map ,keybinding (quote ,(engine/function-name engine-name))))) -(defmacro defengine (engine-name search-engine-url &optional keybinding) +(cl-defmacro defengine (engine-name search-engine-url &key keybinding docstring (browser 'engine/browser-function) (term-transformation-hook 'identity)) "Define a custom search engine. `engine-name' is a symbol naming the engine. `search-engine-url' is the url to be queried, with a \"%s\" standing in for the search term. -The optional value `keybinding' is a string describing the key to -bind the new function. +The optional keyword argument `docstring' assigns a docstring to +the generated function. A reasonably sensible docstring will be +generated if a custom one isn't provided. +The optional keyword argument `browser` assigns the browser +function to be used when opening the URL. +The optional keyword argument `term-transformation-hook' is a +function that will be applied to the search term before it's +substituted into `search-engine-url'. For example, if we wanted +to always upcase our search terms, we might use: + +(defengine duckduckgo + \"https://duckduckgo.com/?q=%s\" + :term-transformation-hook 'upcase) + +In this case, searching for \"foobar\" will hit the url +\"https://duckduckgo.com/?q=FOOBAR\". + +The optional keyword argument `keybinding' is a string describing +the key to bind the new function. -Keybindings are prefixed by the `engine/keymap-prefix', which -defaults to `C-c /'. +Keybindings are in the `engine-mode-map', so they're prefixed. For example, to search Wikipedia, use: (defengine wikipedia \"http://www.wikipedia.org/search-redirect.php?language=en&go=Go&search=%s\" - \"w\") + :keybinding \"w\" + :docstring \"Search Wikipedia!\") Hitting \"C-c / w\" will be bound to the newly-defined `engine/search-wikipedia' function." @@ -122,10 +150,10 @@ Hitting \"C-c / w\" will be bound to the newly-defined (assert (symbolp engine-name)) `(prog1 (defun ,(engine/function-name engine-name) (search-term) - ,(engine/docstring engine-name) + ,(or docstring (engine/docstring engine-name)) (interactive (list (engine/get-query ,(symbol-name engine-name)))) - (engine/execute-search ,search-engine-url search-term)) + (engine/execute-search ,search-engine-url ,browser (,term-transformation-hook search-term))) ,(engine/bind-key engine-name keybinding))) (provide 'engine-mode) -- 2.47.3