diff options
-rw-r--r-- | lisp/servall-wikipedia.el | 40 |
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)) |