From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Dempsky Subject: Smart(er) word wrapping with org-mode and visual-line-mode Date: Thu, 3 Dec 2009 02:14:23 -0800 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e649bb5c62063d0479d041c8 Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NG8hj-0007eR-2q for emacs-orgmode@gnu.org; Thu, 03 Dec 2009 05:14:31 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NG8he-0007Xb-1w for emacs-orgmode@gnu.org; Thu, 03 Dec 2009 05:14:30 -0500 Received: from [199.232.76.173] (port=40701 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NG8hd-0007XF-Qu for emacs-orgmode@gnu.org; Thu, 03 Dec 2009 05:14:25 -0500 Received: from mail-pz0-f193.google.com ([209.85.222.193]:47601) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NG8hd-0005Ij-86 for emacs-orgmode@gnu.org; Thu, 03 Dec 2009 05:14:25 -0500 Received: by pzk31 with SMTP id 31so1106982pzk.28 for ; Thu, 03 Dec 2009 02:14:24 -0800 (PST) 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: emacs-orgmode@gnu.org --0016e649bb5c62063d0479d041c8 Content-Type: text/plain; charset=ISO-8859-1 While playing around with the different options for handling word wrapping in org-mode, I decided to instead hack an extension that improves visual-line-mode's word wrapping when used in conjunction with org-mode. In particular, the mrd-org-smartwrap minor mode automatically sets the `wrap-prefix' property on all section headlines and plain list entries so that visual-line-mode's native word wrapping looks identical to what careful and continual usage of TAB and M-q should produce, without any of the quirks of using auto-fill-mode or refill-mode. Just thought I'd share in case anyone else found it useful / interesting. Caveats: It's incompatible with org-indent-mode, doesn't do anything to support org-adapt-indentation, and results in tables being word wrapped. I've also noticed linum-mode causes it to go crazy if the top visible line is the continuation of a soft wrapped line. --0016e649bb5c62063d0479d041c8 Content-Type: application/octet-stream; name="mrd-org-smartwrap.el" Content-Disposition: attachment; filename="mrd-org-smartwrap.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2rd45a00 Ozs7IG1yZC1vcmctc21hcnR3cmFwLmVsIC0tLSBTbWFydCB3b3JkLXdyYXBwaW5nIGZvciBvcmct bW9kZQo7OyB2ZXJzaW9uIDIwMDkxMjAyCjs7IE1hdHRoZXcgRGVtcHNreQo7Owo7OyBEZXJpdmVk IGZyb20gb3JnLWluZGVudC5lbDoKOzsKOzsgICAgIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KOzsKOzsgICAgIEF1dGhvcjogQ2Fyc3RlbiBEb21pbmlr IDxjYXJzdGVuIGF0IG9yZ21vZGUgZG90IG9yZz4KOzsgICAgIEtleXdvcmRzOiBvdXRsaW5lcywg aHlwZXJtZWRpYSwgY2FsZW5kYXIsIHdwCjs7ICAgICBIb21lcGFnZTogaHR0cDovL29yZ21vZGUu b3JnCjs7ICAgICBWZXJzaW9uOiA2LjMzeAo7Owo7OyAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R05VIEVtYWNzLgo7Owo7OyAgICAgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKOzsgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cjs7ICAgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgo7OyAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KOzsKOzsg ICAgIEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAo7OyAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKOzsgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgICAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCjs7Cjs7ICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyAgICAgYWxv bmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCgo7OyBYWFg6IFNvbWVob3cgcmUtZW5hYmxlIHRydW5jYXRlLWxpbmVzIGZvciBsaW5l cyBjb250YWluaW5nIHRhYmxlcy4KCihyZXF1aXJlICdvcmctbWFjcykKKHJlcXVpcmUgJ29yZy1j b21wYXQpCihyZXF1aXJlICdvcmcpCihldmFsLXdoZW4tY29tcGlsZQogIChyZXF1aXJlICdjbCkp CgooZGVmY29uc3QgbXJkLW9yZy1zbWFydHdyYXAtbWF4IDQwCiAgIk1heGltdW0gaW5kZW50YXRp b24gbGV2ZWwiKQoKKGRlZnZhciBtcmQtb3JnLXNtYXJ0d3JhcC1zdHJpbmdzIG5pbAogICJWZWN0 b3Igd2l0aCBhbGwgcHJlZml4IHN0cmluZ3MuCkl0IHdpbGwgYmUgc2V0IGluIGBtcmQtb3JnLXNt YXJ0d3JhcC1pbml0aWFsaXplJy4iKQoKKGRlZnVuIG1yZC1vcmctc21hcnR3cmFwLWluaXRpYWxp emUgKCkKICAiSW5pdGlhbGl6ZSB0aGUgcHJlZml4IHN0cmluZ3MuIgogICh1bmxlc3MgbXJkLW9y Zy1zbWFydHdyYXAtc3RyaW5ncwogICAgKHNldHEgbXJkLW9yZy1zbWFydHdyYXAtc3RyaW5ncwoJ ICAobWFrZS12ZWN0b3IgKDErIG1yZC1vcmctc21hcnR3cmFwLW1heCkgbmlsKSkKICAgIChsb29w IGZvciBpIGZyb20gMSB0byBtcmQtb3JnLXNtYXJ0d3JhcC1tYXggZG8KCSAgKGFzZXQgbXJkLW9y Zy1zbWFydHdyYXAtc3RyaW5ncyBpIChtYWtlLXN0cmluZyBpID9cICkpKSkpCgo7OzsjIyNhdXRv bG9hZAooZGVmaW5lLW1pbm9yLW1vZGUgbXJkLW9yZy1zbWFydHdyYXAtbW9kZQogICJXaGVuIGFj dGl2ZSwgd3JhcCB0ZXh0IGFjY29yZGluZyB0byBvdXRsaW5lIGFuZCBsaXN0IHN0cnVjdHVyZS4K ClRoaXMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggYHZpc3VhbC1saW5lLW1vZGUn LgpJbnRlcm5hbGx5IHRoaXMgd29ya3MgYnkgYWRkaW5nIGB3cmFwLXByZWZpeCcgcHJvcGVydGll cyBvbgpzZWN0aW9uIGhlYWRsaW5lcyBhbmQgcGxhaW4gbGlzdCBlbnRyaWVzLiIKICBuaWwgIiBz dyIgbmlsCiAgKGlmIChvcmctYm91bmQtYW5kLXRydWUtcCBvcmctaW5oaWJpdC1zdGFydHVwKQog ICAgICAoc2V0cSBtcmQtb3JnLXNtYXJ0d3JhcC1tb2RlIG5pbCkKICAgIChpZiBtcmQtb3JnLXNt YXJ0d3JhcC1tb2RlCgkocHJvZ24KCSAgKG1yZC1vcmctc21hcnR3cmFwLWluaXRpYWxpemUpCgkg IChtYWtlLWxvY2FsLXZhcmlhYmxlICdidWZmZXItc3Vic3RyaW5nLWZpbHRlcnMpCgkgIChhZGQt aG9vayAnYnVmZmVyLXN1YnN0cmluZy1maWx0ZXJzCgkJICAgICdtcmQtb3JnLXNtYXJ0d3JhcC1y ZW1vdmUtcHJvcGVydGllcy1mcm9tLXN0cmluZyBuaWwgdCkKCSAgKGFkZC1ob29rICdhZnRlci1j aGFuZ2UtZnVuY3Rpb25zCgkJICAgICdtcmQtb3JnLXNtYXJ0d3JhcC1hZnRlci1jaGFuZ2Ugbmls IHQpCgkgIChzYXZlLXJlc3RyaWN0aW9uCgkgICAgKHdpZGVuKQoJICAgIChtcmQtb3JnLXNtYXJ0 d3JhcC1hZGQtcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQogICAgICAoc2F2 ZS1yZXN0cmljdGlvbgoJKHdpZGVuKQoJKG1yZC1vcmctc21hcnR3cmFwLXJlbW92ZS1wcm9wZXJ0 aWVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkKICAgICAgKHJlbW92ZS1ob29rICdidWZmZXIt c3Vic3RyaW5nLWZpbHRlcnMKCQkgICAnbXJkLW9yZy1zbWFydHdyYXAtcmVtb3ZlLXByb3BlcnRp ZXMtZnJvbS1zdHJpbmcgdCkKICAgICAgKHJlbW92ZS1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rp b25zCgkJICAgJ21yZC1vcmctc21hcnR3cmFwLWFmdGVyLWNoYW5nZSB0KSkpKQoKOzsgVGhlIHJl Z2V4cHMgaGVyZSBhcmUgYmFzZWQgb24gb3JnLW91dGxpbmUtcmVnZXhwIGFuZCB0aGUgcmVnZXhw cwo7OyBmcm9tIG9yZy1hZGFwdGl2ZS1maWxsLWZ1bmN0aW9uLgoKKGRlZmNvbnN0IG1yZC1vcmct c21hcnR3cmFwLW91dGxpbmUtcmUKICAiXlxcKFxcKisgXFx8WyBcdF0qXFwoWy0qK10gXFx8WzAt OV0rWy4pXSBcXClcXCkiCiAgIk91dGxpbmUgb3IgcGxhaW4gbGlzdCByZWdleHAuIikKCihkZWZ1 biBtcmQtb3JnLXNtYXJ0d3JhcC1hZGQtcHJvcGVydGllcyAoYmVnIGVuZCkKICAiQWRkIGB3cmFw LXByZWZpeCcgcHJvcGVydGllcyBiZXR3ZWVuIEJFRyBhbmQgRU5ELgpBc3N1bWVzIHRoYXQgQkVH IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiIKICAob3JnLXVubW9kaWZpZWQKICAgKHNh dmUtZXhjdXJzaW9uCiAgICAgKGdvdG8tY2hhciBiZWcpCiAgICAgOzsgWFhYOiBVc2UgdGhlIEJP VU5EIGFyZ3VtZW50IHRvIFJFLVNFQVJDSC1GT1JXQVJEPwogICAgICh3aGlsZSAoYW5kIChyZS1z ZWFyY2gtZm9yd2FyZCBtcmQtb3JnLXNtYXJ0d3JhcC1vdXRsaW5lLXJlIG5pbCB0KQoJCSAoPD0g KHBvaW50KSBlbmQpKQogICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAgOzsgWFhYOiBG b3IgZGVmaW5pdGlvbnMgd2l0aCB0ZXJtcyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMsCiAgICAg ICA7OyB0aGUgcmVzdWx0IGlzIHNvbWV3aGF0IHBlY3VsaWFyOyBuYW1lbHksIHRoZSByZXN0IG9m IHRoZQogICAgICAgOzsgdGVybSBpcyBpbmRlbnRlZCA1IHNwYWNlcyBhcyB3ZWxsLiAgSXQgbWln aHQgbWFrZSBzZW5zZSB0bwogICAgICAgOzsgaW5kZW50IGFsbCBvZiB0aGUgdGVybSAodXAgYW5k IGluY2x1ZGluZyB0aGUgIiA6OiAiKSBqdXN0CiAgICAgICA7OyBwYXN0IHRoZSBidWxsZXQgcG9p bnQsIGFuZCB0aGVuIG9ubHkgaW5kZW50IHRoZSByZXN0IG9mIHRoZQogICAgICAgOzsgc3RyaW5n IGFueSBmdXJ0aGVyLiAgTm90IHN1cmUuCgogICAgICAgOzsgWFhYOiBEb2Vzbid0IHN1cHBvcnQg b3JnLWRlc2NyaXB0aW9uLW1heC1pbmRlbnQgYmVpbmcKICAgICAgIDs7IHJpZGljdWxvdXNseSBs YXJnZS4uLiBwcm9iYWJseSBkb2Vzbid0IG5lZWQgdG8uCgogICAgICAgOzsgWFhYOiBEb2Vzbid0 IHN1cHBvcnQgbnVtYmVyZWQgZGVmaW5pdGlvbiBsaXN0czogdGhpcyBtYXRjaGVzCiAgICAgICA7 OyBNLXEncyBiZWhhdmlvciwgYnV0IG5vdCB0aGUgc3ludGF4IGhpZ2hsaWdodGluZy4uLgogICAg ICAgKGxldCAoKGxldmVsIChpZiAoYW5kIChsb29raW5nLWF0ICJbIFx0XSpcXChbLSorXSAuKj8g OjogXFwpIikKCQkJICAgICAoPiAoLSAobWF0Y2gtZW5kIDEpIChtYXRjaC1iZWdpbm5pbmcgMSkp CgkJCQlvcmctZGVzY3JpcHRpb24tbWF4LWluZGVudCkpCgkJCSgtICgrIChtYXRjaC1iZWdpbm5p bmcgMSkgNSkgKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAgICAoLSAobWF0Y2gtZW5kIDApICht YXRjaC1iZWdpbm5pbmcgMCkpKSkpCgkgKHNldC10ZXh0LXByb3BlcnRpZXMKCSAgKHBvaW50LWF0 LWJvbCkgKHBvaW50LWF0LWVvbCkKCSAgYCh3cmFwLXByZWZpeCAsKGFyZWYgbXJkLW9yZy1zbWFy dHdyYXAtc3RyaW5ncyBsZXZlbCkpKSkKICAgICAgIChlbmQtb2YtbGluZSkpKSkpCgooZGVmdW4g bXJkLW9yZy1zbWFydHdyYXAtcmVtb3ZlLXByb3BlcnRpZXMgKGJlZyBlbmQpCiAgIlJlbW92ZSBg d3JhcC1wcmVmaXgnIHByb3BlcnRpZXMgYmV0d2VlbiBCRUcgYW5kIEVORC4iCiAgKG9yZy11bm1v ZGlmaWVkCiAgIChyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIGJlZyBlbmQgJyh3cmFwLXByZWZpeCBu aWwpKSkpCgooZGVmdW4gbXJkLW9yZy1zbWFydHdyYXAtcmVtb3ZlLXByb3BlcnRpZXMtZnJvbS1z dHJpbmcgKHN0cmluZykKICAiUmVtb3ZlIGB3cmFwLXByZWZpeCcgcHJvcGVydGllcyBiZXR3ZWVu IEJFRyBhbmQgRU5ELiIKICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAwIChsZW5ndGggc3RyaW5n KQoJCQkgICcod3JhcC1wcmVmaXggbmlsKSBzdHJpbmcpCiAgc3RyaW5nKQoKKGRlZnVuIG1yZC1v cmctc21hcnR3cmFwLXJlZnJlc2gtcmVnaW9uIChiZWcgZW5kKQogICJSZWZyZXNoIGB3cmFwLXBy ZWZpeCcgcHJvcGVydGllcyBiZXR3ZWVuIEJFRyBhbmQgRU5ELgpBc3N1bWVzIHRoYXQgQkVHIGlz IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiIKICAobXJkLW9yZy1zbWFydHdyYXAtcmVtb3Zl LXByb3BlcnRpZXMgYmVnIGVuZCkKICAobXJkLW9yZy1zbWFydHdyYXAtYWRkLXByb3BlcnRpZXMg YmVnIGVuZCkpCgooZGVmdW4gbXJkLW9yZy1zbWFydHdyYXAtYWZ0ZXItY2hhbmdlIChiZWcgZW5k IGxlbikKICAiUmVmcmVzaCBgd3JhcC1wcmVmaXgnIHByb3BlcnRpZXMgYmV0d2VlbiBCRUcgYW5k IEVORC4iCiAgKG1yZC1vcmctc21hcnR3cmFwLXJlZnJlc2gtcmVnaW9uCiAgIChzYXZlLWV4Y3Vy c2lvbiAoZ290by1jaGFyIGJlZykgKHBvaW50LWF0LWJvbCkpCiAgIChzYXZlLWV4Y3Vyc2lvbiAo Z290by1jaGFyIGVuZCkgKHBvaW50LWF0LWVvbCkpKSkKCihwcm92aWRlICdtcmQtb3JnLXNtYXJ0 d3JhcCkKCjs7OyBtcmQtb3JnLXNtYXJ0d3JhcC5lbCBlbmRzIGhlcmUK --0016e649bb5c62063d0479d041c8 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --0016e649bb5c62063d0479d041c8--