emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: w3m integration for yanking w3m buffers into org


From: Richard Riley
Subject: [Orgmode] Re: w3m integration for yanking w3m buffers into org
Date: Fri, 10 Oct 2008 16:44:00 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux)

Richard Riley <address@hidden> writes:

> 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.

A small follow up to this, possibly related to using emacs 23 I dont
know, but I had some load order issues with the keybinding for the w3m
buffer. The following solved it:

,----
| (eval-after-load "w3m"  '(load "manatee"))
`----

Where "manatee" is the code below.


,----
| ;; 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)
`----





reply via email to

[Prev in Thread] Current Thread [Next in Thread]