emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Richard Riley <rileyrgdev@googlemail.com>
To: org-mode <emacs-orgmode@gnu.org>
Subject: w3m integration for yanking w3m buffers into org
Date: Fri, 10 Oct 2008 11:23:44 +0200	[thread overview]
Message-ID: <sxljwwg5wf.fsf@development.richardriley.net> (raw)


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

             reply	other threads:[~2008-10-10  9:23 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-10  9:23 Richard Riley [this message]
2008-10-10 12:45 ` w3m integration for yanking w3m buffers into org Chris McMahan
2008-10-10 14:44 ` Richard Riley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sxljwwg5wf.fsf@development.richardriley.net \
    --to=rileyrgdev@googlemail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).