forked from emacs-helm/helm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelm-firefox.el
111 lines (91 loc) · 4.03 KB
/
helm-firefox.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
;;; helm-firefox.el --- Firefox bookmarks
;; Copyright (C) 2012 ~ 2013 Thierry Volpiatto <[email protected]>
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Code:
(eval-when-compile (require 'cl))
(require 'helm)
(require 'helm-utils)
(require 'helm-adaptative)
;;
;; You will have to set firefox to import bookmarks in his html file bookmarks.html.
;; (only for firefox versions >=3)
;; To achieve that, open about:config in firefox and double click on this line to enable value
;; to true:
;; user_pref("browser.bookmarks.autoExportHTML", false);
;; You should have now:
;; user_pref("browser.bookmarks.autoExportHTML", true);
;; NOTE: This is also working in the same way for mozilla aka seamonkey.
(defvar helm-firefox-bookmark-url-regexp "\\(https\\|http\\|ftp\\|about\\|file\\)://[^ \"]*")
(defvar helm-firefox-bookmarks-regexp ">\\([^><]+.[^</a>]\\)")
(defun helm-get-firefox-user-init-dir ()
"Guess the default Firefox user directory name."
(let* ((moz-dir (concat (getenv "HOME") "/.mozilla/firefox/"))
(moz-user-dir
(with-current-buffer (find-file-noselect (concat moz-dir "profiles.ini"))
(goto-char (point-min))
(prog1
(when (search-forward "Path=" nil t)
(buffer-substring-no-properties (point) (point-at-eol)))
(kill-buffer)))))
(file-name-as-directory (concat moz-dir moz-user-dir))))
(defun helm-guess-firefox-bookmark-file ()
"Return the path of the Firefox bookmarks file."
(concat (helm-get-firefox-user-init-dir) "bookmarks.html"))
(defvar helm-firefox-bookmarks-alist nil)
(defvar helm-source-firefox-bookmarks
'((name . "Firefox Bookmarks")
(init . (lambda ()
(setq helm-firefox-bookmarks-alist
(helm-html-bookmarks-to-alist
(helm-guess-firefox-bookmark-file)
helm-firefox-bookmark-url-regexp
helm-firefox-bookmarks-regexp))))
(candidates . (lambda ()
(mapcar #'car helm-firefox-bookmarks-alist)))
(filtered-candidate-transformer
helm-adaptive-sort
helm-highlight-firefox-bookmarks)
(action . (("Browse Url"
. (lambda (candidate)
(helm-browse-url
(helm-firefox-bookmarks-get-value candidate))))
("Copy Url"
. (lambda (elm)
(kill-new (helm-w3m-bookmarks-get-value elm))))))))
(defun helm-firefox-bookmarks-get-value (elm)
(assoc-default elm helm-firefox-bookmarks-alist))
(defun helm-highlight-firefox-bookmarks (bookmarks source)
(loop for i in bookmarks
collect (propertize
i 'face '((:foreground "YellowGreen"))
'help-echo (helm-firefox-bookmarks-get-value i))))
;;;###autoload
(defun helm-firefox-bookmarks ()
"Preconfigured `helm' for firefox bookmark.
You will have to enable html bookmarks in firefox:
open about:config in firefox and double click on this line to enable value \
to true:
user_pref(\"browser.bookmarks.autoExportHTML\", false);
You should have now:
user_pref(\"browser.bookmarks.autoExportHTML\", true);
After closing firefox, you will be able to browse you bookmarks.
"
(interactive)
(helm-other-buffer 'helm-source-firefox-bookmarks
"*Helm Firefox*"))
(provide 'helm-firefox)
;; Local Variables:
;; byte-compile-warnings: (not cl-functions obsolete)
;; coding: utf-8
;; indent-tabs-mode: nil
;; End:
;;; helm-firefox.el ends here