emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/orgalist 0ae1c16 2/2: Second version, sent to emacs-dev


From: Stefan Monnier
Subject: [elpa] externals/orgalist 0ae1c16 2/2: Second version, sent to emacs-devel
Date: Mon, 30 Apr 2018 11:59:52 -0400 (EDT)

branch: externals/orgalist
commit 0ae1c1699eb064843f25509345adba5257ecea7c
Author: Nicolas Goaziou <address@hidden>
Commit: Stefan Monnier <address@hidden>

    Second version, sent to emacs-devel
---
 orgalist.el | 69 +++++++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 51 insertions(+), 18 deletions(-)

diff --git a/orgalist.el b/orgalist.el
index 0263046..f11cffb 100644
--- a/orgalist.el
+++ b/orgalist.el
@@ -1,9 +1,11 @@
-;;; orgalist.el --- Manage Org lists in non-Org buffers  -*- lexical-binding: 
t; -*-
+;;; orgalist.el --- Manage Org-like lists in non-Org buffers  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2017  Nicolas Goaziou
+;; Copyright (C) 2017, 2018  Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <address@hidden>
+;; Maintainer: Nicolas Goaziou <address@hidden>
 ;; Keywords: convenience
+;; Version: 1.0
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -20,23 +22,29 @@
 
 ;;; Commentary:
 
-;; This library provides Org mode's plain lists in non-Org buffers.
+;; This library provides Org mode's plain lists in non-Org buffers, as
+;; a minor mode.
 
 ;; More specifically, it supports syntax for numbered, unnumbered,
-;; description items, checkboxes, and counter cookies.
+;; description items, checkboxes, and counter cookies.  See (info
+;; "(org) Plain Lists") and (info "(org) Checkboxes") for details
+;; about the syntax of such constructs.
 
-;; Besides, the following features are supported:
+;; The following features are supported:
 
-;; - Navigation (M-<up>, M-<down>)
-;; - Indentation (M-<left>, M-<right>, M-S-<left>, M-S-<right>, TAB)
-;; - Re-ordering (M-S-<up>, M-S-<down>)
-;; - Item insertion (M-RET)
+;; - Item insertion (M-<RET>)
+;; - Navigation (M-<UP>, M-<DOWN>)
+;; - Indentation (M-<LEFT>, M-<RIGHT>, M-S-<LEFT>, M-S-<RIGHT>, <TAB>)
+;; - Re-ordering (M-S-<UP>, M-S-<DOWN>)
 ;; - Toggling checkboxes (C-c C-c)
 ;; - Cycling bullets (C-c -)
 ;; - Sorting items (C-c ^)
 ;; - Filling items (M-q)
 ;; - Auto filling (when Auto Fill mode is enabled)
 
+;; Note that the bindings above are only available when point is in an
+;; item (for M-<RET>, M-<UP>, M-<DOWN> and M-q) or exactly at an item.
+
 ;; The library also implements radio lists:
 
 ;; Call the `orgalist-insert-radio-list' function to insert a radio list
@@ -70,7 +78,6 @@
 ;; LaTeX list in-between the "BEGIN RECEIVE" and "END RECEIVE" marker
 ;; lines.
 
-
 ;;; Code:
 
 (require 'easymenu)
@@ -78,8 +85,9 @@
 
 (defvar mail-header-separator)
 (defvar message-signature-separator)
+(defvar orgalist-mode)
 
-
+
 ;;; Configuration variables
 
 (defgroup orgalist nil
@@ -133,7 +141,7 @@ list, obtained by prompting the user."
           (list (symbol :tag "Major mode")
                 (string :tag "Format"))))
 
-
+
 ;;; Mode specific context functions
 
 (defun orgalist-message-mode-context ()
@@ -156,7 +164,7 @@ Otherwise, return nil."
            nil)
           (t nil))))
 
-
+
 ;;; Internal variables
 
 (defvar orgalist--menu nil
@@ -177,7 +185,10 @@ group 4: description tag")
 (defvar-local orgalist--cycling-state nil
   "Current cycling state when cycling indentation.")
 
+(defvar-local orgalist--last-advised-function nil
+  "Function currently advised for Auto fill mode.")
 
+
 ;;; Internal functions
 
 (defun orgalist--call-in-item (fun pos)
@@ -426,6 +437,9 @@ Assume point is at an item."
       struct)))
 
 (defun orgalist--goto-following-item (previous?)
+  "Move point to next item in current list.
+When PREVIOUS? is non-nil, move it to the previous item instead.
+Throw an error if the move is not possible."
   (let* ((struct (orgalist--struct))
          (prevs (org-list-prevs-alist struct))
          (next (funcall (if previous? #'org-list-get-prev-item
@@ -436,6 +450,9 @@ Assume point is at an item."
     (goto-char next)))
 
 (defun orgalist--move-item (up?)
+  "Move item at point down.
+When UP? is non-nil, move it up instead.  Throw an error if the
+move is not possible."
   (let* ((col (current-column))
          (item (line-beginning-position))
          (struct (orgalist--struct))
@@ -462,6 +479,20 @@ Assume point is at an item."
       (when item?
         (orgalist--call-in-item normal-auto-fill-function item?)))))
 
+(defun orgalist--set-auto-fill ()
+  "Add advice to current Auto fill function.
+This function is meant to be used as a post command hook so it
+can periodically check changes to variable ‘auto-fill-function’."
+  (when (and auto-fill-function
+             (not (advice-function-member-p #'orgalist--auto-fill
+                                            auto-fill-function)))
+    (when orgalist--last-advised-function
+      (remove-function orgalist--last-advised-function #'orgalist--auto-fill))
+    (setq orgalist--last-advised-function auto-fill-function)
+    (add-function :before-until
+                  (local 'auto-fill-function)
+                  #'orgalist--auto-fill)))
+
 (defun orgalist--while-at-item (cmd)
   "Return CMD when point is at a list item."
   (when (orgalist--at-item-p) cmd))
@@ -470,7 +501,7 @@ Assume point is at an item."
   "Return CMD when point is in a list item."
   (when (orgalist--in-item-p) cmd))
 
-
+
 ;;; Bindings and menu
 
 (defconst orgalist--maybe-fill
@@ -555,7 +586,7 @@ Assume point is at an item."
     "---"
     ["Sort items" orgalist-sort-items :active (orgalist--at-item-p)]))
 
-
+
 ;;; Minor mode definition
 
 (define-minor-mode orgalist-mode
@@ -589,11 +620,13 @@ TAB             `orgalist-cycle-indentation'"
     (setq-local org-list-automatic-rules nil)
     (setq-local org-list-demote-modify-bullet nil)
     (setq-local org-list-two-spaces-after-bullet-regexp nil)
-    (add-function :before-until normal-auto-fill-function 
#'orgalist--auto-fill))
+    (add-hook 'post-command-hook #'orgalist--set-auto-fill nil t)
+    (orgalist--set-auto-fill))
    (t
-    (remove-function normal-auto-fill-function #'orgalist--auto-fill))))
-
+    (remove-hook 'post-command-hook #'orgalist--set-auto-fill t)
+    (remove-function orgalist--last-advised-function #'orgalist--auto-fill))))
 
+
 ;;; Public functions
 
 ;;;###autoload



reply via email to

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