summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/servall-wikipedia.el40
1 files changed, 37 insertions, 3 deletions
diff --git a/lisp/servall-wikipedia.el b/lisp/servall-wikipedia.el
index c6b0e93..10f4d0a 100644
--- a/lisp/servall-wikipedia.el
+++ b/lisp/servall-wikipedia.el
@@ -82,10 +82,31 @@
(define-key map "n" 'org-next-visible-heading)
(define-key map "p" 'org-previous-visible-heading)
(define-key map "r" 'servall-wikipedia-history-forward)
+ (define-key map "w" 'servall-wikipedia-copy-link-at-point)
map))
(defun servall-wikipedia-view-buffer (title)
(format "*wikipedia %s*" title))
+(defun servall-wikipedia-copy-link-at-point ()
+ (interactive)
+ (let ((link
+ (if (org-in-regexp org-link-any-re)
+ (org-unbracket-string "<" ">"
+ (or
+ ;; [[target][desc]]
+ (match-string-no-properties 2)
+ ;; plain link or <...>
+ (match-string-no-properties 0)))
+ (format "wiki:%s#%s" servall-wikipedia-title
+ (org-entry-get (point) "ITEM")))))
+ (setq link
+ (replace-regexp-in-string
+ " " "_"
+ (replace-regexp-in-string
+ "^wiki:" "https://en.wikipedia.org/wiki/" link)))
+ (kill-new link)
+ (message "Copied: %s" link)))
+
(defun servall-wikipedia-history-back ()
(interactive)
(if servall-wikipedia-history-prev
@@ -134,15 +155,28 @@
(insert (servall-api-wikipedia-org title))
(servall-wikipedia-fix-tables)
(when servall-wikipedia-auto-save
+ (servall-touch-new-file filename)
(write-region (point-min) (point-max) filename))))
(goto-char (point-min))))
buffer))
-(defun servall-wikipedia-open (title)
- (interactive "sTitle: ")
+(defun servall-touch-new-file (filename)
+ "Touch a new file."
+ (with-temp-buffer (write-file filename)))
+
+(defun servall-wikipedia-open (url-or-title)
+ (interactive "sUrl or title: ")
+ (cond ((string-match "http\\(s\\)?://en.wikipedia.org/wiki/\\(.*\\)"
+ url-or-title)
+ (servall-wikipedia-open-internal (match-string 2 url-or-title)))
+ (t (servall-wikipedia-open-internal url-or-title))))
+
+(defun servall-wikipedia-open-internal (title)
(condition-case nil
- (switch-to-buffer (servall-wikipedia-load title))
+ (servall-wikipedia-open-wikilink title)
(error (servall-wikipedia-search title))))
+(define-key servall-wikipedia-view-mode-map "o" 'servall-wikipedia-open)
+(define-key servall-wikipedia-view-mode-map "s" 'servall-wikipedia-search)
(defun servall-wikipedia-fix-tables ()
(let ((inhibit-read-only t))