init-browse-url.el 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. (use-package browse-url
  2. :hook
  3. (after-init . qrthi/select-text-browser)
  4. (after-init . qrthi/defalias-webjump-url-fix)
  5. :bind
  6. (:prefix-map qrthi/browse-url-prefix
  7. :prefix "C-c u b"
  8. ("b" . browse-url)
  9. ("i" . qrthi/browse-url-image-viewer)
  10. ("g" . qrthi/browse-url-graphical-browser)
  11. ("j" . webjump)
  12. )
  13. :init
  14. (defun qrthi/select-text-browser ()
  15. (if (executable-find "w3m")
  16. (defalias 'qrthi/browse-url-text-browser 'qrthi/browse-url-w3m)
  17. (defalias 'qrthi/browse-url-text-browser 'eww-browse-url))
  18. (defalias 'qrthi/browse-url-graphical-browser 'qrthi/browse-url-luakit)
  19. (defalias 'qrthi/browse-url-image-viewer'qrthi/browse-url-mpv)
  20. )
  21. (defun qrthi/defalias-webjump-url-fix ()
  22. ;; no idea why this doesn't work
  23. (defalias 'webjump-url-fix 'qrthi/webjump-url-fix))
  24. (defun qrthi/webjump-url-fix (url)
  25. (if (webjump-null-or-blank-string-p url) ""
  26. (webjump-url-fix-trailing-slash
  27. (cond
  28. ((string-match "^[a-zA-Z]+:" url) url)
  29. ((string-match "^/" url) (concat "file://" url))
  30. ((string-match "^\\([^\\./]+\\)" url)
  31. (concat (if (string= (downcase (match-string 1 url)) "ftp")
  32. "ftp" "https") "://" url)) (t url)))))
  33. (defun qrthi/browse-url-mpv (url &optional new-window)
  34. "Stream files with mpv"
  35. (interactive (browse-url-interactive-arg "URL: "))
  36. (message "Opening %s with mpv..." url)
  37. (start-process "mvi" nil "mpv"
  38. "--no-config" "--loop-file=inf" "--force-window=immediate" url))
  39. (defun qrthi/browse-url-luakit (url &optional new-window)
  40. (interactive (browse-url-interactive-arg "URL: "))
  41. (message "Opening %s with luakit..." url)
  42. (start-process "luakit" nil "luakit"
  43. url))
  44. (defun qrthi/browse-url-qutebrowser (url &optional new-window)
  45. (interactive (browse-url-interactive-arg "URL: "))
  46. (message "Opening %s with qutebrowser..." url)
  47. (start-process "qutebrowser" nil "qutebrowser"
  48. "--temp-basedir"
  49. ":set content.autoplay false"
  50. ":set content.canvas_reading false"
  51. ;; ":set content.cookies.accept no-3rdparty" ; canvas needs cookies
  52. ;; ":set content.cookies.store false"
  53. ":set content.default_encoding utf8"
  54. ":set content.geolocation false"
  55. ":set content.host_blocking.enabled false"
  56. ":set content.persistent_storage false"
  57. ":set content.webgl false"
  58. ":set downloads.location.prompt false"
  59. ":set downloads.position bottom"
  60. ":set editor.command \"['emacsclient', '{file}']\""
  61. ":set hints.chars \"aoeuidhtns\""
  62. ":set new_instance_open_target window"
  63. ":set scrolling.bar never"
  64. ":set tabs.position bottom"
  65. ":set tabs.show never"
  66. ":set tabs.tabs_are_windows true"
  67. ;; ":set content.cache.appcache false"
  68. ;; ":set content.frame_flattening true"
  69. ;; ":set content.images false"
  70. ;; ":set content.javascript.enabled false"
  71. ;; ":set content.notifications false"
  72. ;; ":set downloads.open_dispatcher \"wget\""
  73. ;; ":set hints.find_implementation javascript"
  74. ;; ":set hints.mode word"
  75. ;; ":set statusbar.hide true"
  76. ;; ":set window.hide_decoration true"
  77. (concat ":set downloads.location.directory " qrthi/directory-downloads)
  78. ;; ":bind f nop"
  79. ":bind g reload"
  80. ;; ":bind <Alt-g>o hint all normal"
  81. ;; ":bind <Alt-g>O hint all tab"
  82. ;; ":bind <Alt-g>r hint all right-click"
  83. ;; ":bind <Alt-g>h hint all hover"
  84. ;; ":bind <Alt-g>y hint links yank"
  85. ;; ":bind <Alt-g>d hint links download"
  86. ;; ":bind <Alt-g>m hint links spawn mpv {hint-url}"
  87. ;; ":bind <Ctrl-j> yank"
  88. ;; ":bind <Ctrl-Alt-j> edit-url"
  89. ":bind <Ctrl-f> search-next"
  90. ;; ":bind <Ctrl-r> search-prev"
  91. ;; ":bind <Ctrl-/> undo"
  92. ":bind l back"
  93. ":bind r forward"
  94. ":bind H history"
  95. ":bind v view-source"
  96. ;; ":bind && open-editor"
  97. ;; window.title_format (Current: {perc}{current_title}{title_sep}qutebrowser)
  98. url))
  99. (defun qrthi/browse-url-surf (url &optional new-window)
  100. "acgDIsVMf"
  101. (interactive (browse-url-interactive-arg "URL: "))
  102. (message "Opening %s with acgDISVMf..." url)
  103. (start-process "surf" nil "surf"
  104. "-aa" ; deny cookies
  105. "-S" ; enable js
  106. ;; "-i" ; disable images
  107. ;; "-u" qrthi/user-agent
  108. "-b" ; disable scrollbar
  109. url))
  110. :custom
  111. (browse-url-browser-function
  112. '((".+\\.jp\\(e\\)?g$" . qrthi/browse-url-image-viewer)
  113. (".+\\.png$" . qrthi/browse-url-image-viewer)
  114. (".+\\.webm$" . qrthi/browse-url-image-viewer)
  115. (".+\\.gif$" . qrthi/browse-url-image-viewer)
  116. ("ankiweb.net" . qrthi/browse-url-graphical-browser)
  117. ("\\(www\\.\\)?youtube\\.com" . qrthi/browse-url-graphical-browser)
  118. ("ankiweb\\.net" . qrthi/browse-url-graphical-browser)
  119. ("duckduckgo\\.com\\/\\?.+iax=images.*&q=.+" . qrthi/browse-url-graphical-browser)
  120. ("what-ch\\.mooo\\.com" . qrthi/browse-url-graphical-browser)
  121. ("cock\\.li" . qrthi/browse-url-graphical-browser)
  122. ("gnfos\\.com" . qrthi/browse-url-graphical-browser)
  123. ("gog\\.com" . qrthi/browse-url-graphical-browser)
  124. ("landingscu\\.org" . qrthi/browse-url-graphical-browser)
  125. ("thepiratebay\\.org" . qrthi/browse-url-graphical-browser)
  126. ("nixos.org.+options\\.html" . qrthi/browse-url-graphical-browser)
  127. ("learn\\.maricopa\\.edu" . qrthi/browse-url-graphical-browser)
  128. ("lutris\\.net" . qrthi/browse-url-graphical-browser)
  129. ("tutanota\\.com" . qrthi/browse-url-graphical-browser)
  130. ("notabug\\.org" . qrthi/browse-url-graphical-browser)
  131. ("winehq\\.org" . qrthi/browse-url-graphical-browser)
  132. ("ebay\\.com" . qrthi/browse-url-graphical-browser)
  133. ("quizlet\\.com" . qrthi/browse-url-graphical-browser)
  134. ("lolcow\\.farm" . qrthi/browse-url-graphical-browser)
  135. ("craigslist\\.org" . qrthi/browse-url-graphical-browser)
  136. ("kiwifarms\\.net" . qrthi/browse-url-graphical-browser)
  137. ("melpa\\.org" . qrthi/browse-url-graphical-browser)
  138. ("192.168.1.1" . qrthi/browse-url-graphical-browser)
  139. ("." . qrthi/browse-url-text-browser)))
  140. (webjump-sites '( ;; Query sites
  141. ("DuckDuckGo Lite" .
  142. [simple-query "duckduckgo.com/lite" ;duckduckgo.com
  143. "duckduckgo.com/lite?&kp=-2&kd=-1&kv=1&k1=-1&q=" ;kh=1& &kz=-1
  144. ""])
  145. ("DuckDuckGo Images" .
  146. [simple-query "duckduckgo.com/" ;duckduckgo
  147. "duckduckgo.com/?&iax=images&ia=images&kp=-1&kh=1&k1=-1&q="
  148. ""])
  149. ("Anki Web" .
  150. [simple-query "ankiweb.net/"
  151. "ankiweb.net/shared/decks/"
  152. ""])
  153. ("Bandcamp" .
  154. [simple-query "bandcamp.com"
  155. "bandcamp.com/search?q="
  156. ""])
  157. ("BitChute" .
  158. [simple-query "bitchute.com"
  159. "search.bitchute.com/&query="
  160. ""])
  161. ("Cataclysm: Dark Days Ahead Wiki" .
  162. [simple-query "cddawiki.chezzo.com/cdda_wiki/index.php?title=Main_Page"
  163. "cddawiki.chezzo.com/cdda_wiki/index.php?search="
  164. "&title=Special%3ASearch&go=Go"
  165. ])
  166. ("Christgau Search" .
  167. [simple-query "robertchristgau.com/"
  168. "robertchristgau.com/get_artist.php?name="
  169. ""])
  170. ("Circuit Specialists" .
  171. [simple-query "circuitspecialists.com"
  172. "circuitspecialists.com/search.html?searchQuery="
  173. ""])
  174. ("CiteSeer Citation Search" .
  175. [simple-query "citeseer.nj.nec.com"
  176. "citeseer.nj.nec.com/cs?q="
  177. "&submit=Search+Citations&cs=1"])
  178. ("CiteSeer Document Search" .
  179. [simple-query "citeseer.nj.nec.com"
  180. "citeseer.nj.nec.com/cs?q="
  181. "&submit=Search+Documents&cs=1"])
  182. ("Danbooru" .
  183. [simple-query "danbooru.me/explore/posts/popular"
  184. "danbooru.me/posts?tags="
  185. ""])
  186. ("e621" .
  187. [simple-query "e621.net"
  188. "e621.net/posts?tags="
  189. ""])
  190. ("Feedbooks" .
  191. [simple-query "feedbooks.com/publicdomain"
  192. "feedbooks.com/search?protection=drmfree&query="
  193. ""])
  194. ("Gelbooru" .
  195. [simple-query "gelbooru.com/"
  196. "gelbooru.com/index.php?page=post&s=list&tags="
  197. ""])
  198. ("Head-fi" .
  199. [simple-query "head-fi.org/"
  200. "head-fi.org/search/?q="
  201. "&o=relevance"])
  202. ("Library Genesis" .
  203. [simple-query "libgen.is/"
  204. "libgen.is/search.php?req="
  205. ""])
  206. ("Lutris" .
  207. [simple-query "lutris.net"
  208. "lutris.net/games?q="
  209. ""])
  210. ("Interactive Fiction Database" .
  211. [simple-query "ifdb.tads.org"
  212. "ifdb.tads.org/search?searchbar="])
  213. ("NewEgg" .
  214. [simple-query "newegg.com"
  215. "newegg.com/p/pl?d="
  216. ""])
  217. ("Nitter" .
  218. [simple-query "nitter.net"
  219. "nitter.net/"
  220. ""])
  221. ("Paheal.net" .
  222. [simple-query "rule34.paheal.net/"
  223. "rule34.paheal.net/post/list/"
  224. "/1"])
  225. ("Pirate Bay" .
  226. [simple-query "thepiratebay.org"
  227. "thepiratebay.org/search.php?q="
  228. "&all=on&search="])
  229. ("Project Gutenberg" .
  230. [simple-query "gutenberg.org"
  231. "gutenberg.org/ebooks/search/?query="
  232. ""])
  233. ("Quizlet" .
  234. [simple-query "quizlet.com/"
  235. "quizlet.com/subject/"
  236. ""])
  237. ("Rebecca Black Tech" .
  238. [simple-query "rbt.asia/"
  239. "rbt.asia/_/search/text/"
  240. ""])
  241. ("Standard Ebooks" .
  242. [simple-query "standardebooks.org"
  243. "standardebooks.org/ebooks?query="
  244. ""])
  245. ("SWFchan" .
  246. [simple-query "swfchan.com"
  247. "eye.swfchan.com/search/?q="
  248. ""])
  249. ("ThinkWiki" .
  250. [simple-query "thinkwiki.org"
  251. "thinkwiki.org/w/index.php?search="
  252. ""])
  253. ("TinEye" .
  254. [simple-query "tineye.com"
  255. "tineye.com/search/"
  256. "?sort=score&order=desc&page=1"])
  257. ("Wikibooks" .
  258. [simple-query "wikibooks.org"
  259. "en.wikibooks.org/w/index.php?search="
  260. ""])
  261. ("Wikipedia" .
  262. [simple-query "wikipedia.org"
  263. "https://en.wikipedia.org/wiki/Special:Search?search="
  264. ""])
  265. ("Wine" .
  266. [simple-query "winehq.org"
  267. "winehq.org/search?q="
  268. ""])
  269. ("YouTube" .
  270. [simple-query "youtube.com"
  271. "youtube.com/results?search_query="
  272. ""])
  273. ;; Forums
  274. ("/prog/" . "dis.tinychan.net/prog/")
  275. ("/what/ - What..." . "what-ch.mooo.com/what")
  276. ("Bunbunmaru" . "bunbunmaru.com/wakaba/")
  277. ("GNFOS" . "gnfos.com/jp")
  278. ("Kiwi Farms" . "kiwifarms.net")
  279. ("Lolcow" . "lolcow.farm")
  280. ("Melpa" . "melpa.org")
  281. ("Nixers" . "nixers.net")
  282. ("Ota" . "ota-ch.com")
  283. ("Secret Area of VIP Quality" . "secretareaofvipquality.org/saovq/")
  284. ;; Bookmarks
  285. ("Cockmail" . "mail.cock.li")
  286. ("Pine64" . "pine64.org")
  287. ("Bookshop" . "bookshop.org")
  288. ("Music Theory" . "musictheory.net/lessons")
  289. ("Canvas" . "learn.maricopa.edu")
  290. ("Crowd Supply" . "crowdsupply.com")
  291. ("GOG" . "gog.com")
  292. ("Gitea" . "gitea.org")
  293. ("I Love Languages" . "ilovelanguages.org")
  294. ("Landings" . "landingscu.org")
  295. ("LuCi" . "192.168.1.1")
  296. ("Mesa Community College" . "mesacc.edu")
  297. ("Mobile NixOS" . "mobile.nixos.org")
  298. ("Nix Pills" . "nixos.org/guides/nix-pills/index.html")
  299. ("NixOS Options" . "nixos.org/nixos/options.html")
  300. ("NixOS Learn" . "nixos.org/learn.html")
  301. ("Not a Bug" . "notabug.org")
  302. ("postmarketOS" . "postmarketos.org")
  303. ("Ruwix Wiki" . "ruwix.com")
  304. ("Suckless" . "suckless.org")
  305. ("Ting" . "ting.com")
  306. ("Tutanota" . "tutanota.com")
  307. )))