From mboxrd@z Thu Jan 1 00:00:00 1970 From: Richard Riley Subject: w3m integration for yanking w3m buffers into org Date: Fri, 10 Oct 2008 11:23:44 +0200 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KoEDc-00037y-9k for emacs-orgmode@gnu.org; Fri, 10 Oct 2008 05:23:32 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KoEDa-00036z-CM for emacs-orgmode@gnu.org; Fri, 10 Oct 2008 05:23:31 -0400 Received: from [199.232.76.173] (port=48498 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KoEDa-00036p-6B for emacs-orgmode@gnu.org; Fri, 10 Oct 2008 05:23:30 -0400 Received: from ug-out-1314.google.com ([66.249.92.170]:37775) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KoEDa-0007HV-Fc for emacs-orgmode@gnu.org; Fri, 10 Oct 2008 05:23:31 -0400 Received: by ug-out-1314.google.com with SMTP id z36so1356358uge.17 for ; Fri, 10 Oct 2008 02:23:28 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: org-mode I'm not fully aware of the steps needed to integrate new stuff but for those using gnus and w3m to read html emails or newsletters then the following code might interest you for saving portions into org tasks/items. Let me know if there are any issues - it works well for me! I have the first code saved as manatee.el and "require" it in. r. ,---- | ;; Code to integrate the w3m article buffer in gnus with org-mode. | ;; Kudos to Andy Stewart (ManateeLazyCat on #emacs IRC) for provding | ;; the code following a request. Can now paste w3m regions showing html | ;; emails and newsletters directly into org-mode buffers with the URLs | ;; transformed into org links. There is a default M-w key binding included. | ;; | ;; manatee.el for now prior to any integration. | ;; | ;; Oct 2008, rgr. | | (defun w3m-get-buffer-with-org-style () | "Get current buffer content with `org-mode' style. | This function will encode `link-title' and `link-location' with `org-make-link-string'. | And move buffer content to lastest of kill ring. | So you can yank in `org-mode' buffer to get `org-mode' style content." | (interactive) | (let (transform-start | transform-end | return-content | link-location | link-title) | (if mark-active | (progn | (setq transform-start (region-beginning)) | (setq transform-end (region-end)) | (deactivate-mark)) | (progn | (setq transform-start (point-min)) | (setq transform-end (point-max)))) | (message "Start transform link to `org-mode' style, please wait...") | (save-excursion | (goto-char transform-start) | ;; (goto-char (point-min)) | (while (and (< (point) transform-end) | (not (w3m-no-next-link-p))) ;if have next link in current buffer | (if (not (w3m-anchor (point))) ;don't move when current point have a valid url | ;; get content between two links. | (setq return-content (concat return-content (buffer-substring (point) (w3m-get-next-link-start))))) | ;; get link location at current point. | (setq link-location (w3m-anchor (point))) | ;; get link title at current point. | (setq link-title (buffer-substring (point) (w3m-get-anchor-end))) | ;; concat `org-mode' style url to `return-content'. | (setq return-content (concat return-content (org-make-link-string link-location link-title)))) | ;; concat rest context of current buffer | (setq return-content (concat return-content (buffer-substring (point) transform-end))) | (kill-new return-content) | (message "Transform link completed. You can get it from lastest kill ring.")))) | | (defun w3m-get-anchor-start () | "Move and return `point' for thst start of the current anchor." | (interactive) | (goto-char (or (previous-single-property-change (point) 'w3m-anchor-sequence) ;get start position of anchor | (point))) ;or current point | (point)) | | (defun w3m-get-anchor-end () | "Move and return `point' after the end of current anchor." | (interactive) | (goto-char (or (next-single-property-change (point) 'w3m-anchor-sequence) ;get end position of anchor | (point))) ;or current point | (point)) | | (defun w3m-get-next-link-start () | "Move and return `point' for that start of the current link." | (interactive) | (catch 'reach | (while (next-single-property-change (point) 'w3m-anchor-sequence) ;jump to next anchor | (goto-char (next-single-property-change (point) 'w3m-anchor-sequence)) | (when (w3m-anchor (point)) ;return point when current is valid link | (throw 'reach nil)))) | (point)) | | (defun w3m-get-prev-link-start () | "Move and return `point' for that end of the current link." | (interactive) | (catch 'reach | (while (previous-single-property-change (point) 'w3m-anchor-sequence) ;jump to previous anchor | (goto-char (previous-single-property-change (point) 'w3m-anchor-sequence)) | (when (w3m-anchor (point)) ;return point when current is valid link | (throw 'reach nil)))) | (point)) | | | (defun w3m-no-next-link-p () | "Return t if no next link after cursor. | Otherwise, return nil." | (save-excursion | (equal (point) (w3m-get-next-link-start)))) | | (defun w3m-no-prev-link-p () | "Return t if no prevoius link after cursor. | Otherwise, return nil." | (save-excursion | (equal (point) (w3m-get-prev-link-start)))) | | (define-key w3m-minor-mode-map (kbd "M-w") 'w3m-get-buffer-with-org-style) | | (provide 'manatee) `---- -- It has become appallingly obvious that our technology has exceeded our humanity. ~Albert Einstein