[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org-transclusion 6c0352f33a 01/29: Feature: select end
|
From: |
ELPA Syncer |
|
Subject: |
[elpa] externals/org-transclusion 6c0352f33a 01/29: Feature: select end via n things at point. |
|
Date: |
Mon, 8 May 2023 06:59:03 -0400 (EDT) |
branch: externals/org-transclusion
commit 6c0352f33ad4386f7b69faa358a9ab91078b8fd7
Author: Benjamin Cherry <ben@devcarbon.com>
Commit: Benjamin Cherry <ben@devcarbon.com>
Feature: select end via n things at point.
---
org-transclusion-src-lines.el | 57 +++++++++++++++++++++++++++++++++----------
org-transclusion.el | 10 ++++++++
2 files changed, 54 insertions(+), 13 deletions(-)
diff --git a/org-transclusion-src-lines.el b/org-transclusion-src-lines.el
index b37b1c826c..3458991fc3 100644
--- a/org-transclusion-src-lines.el
+++ b/org-transclusion-src-lines.el
@@ -32,6 +32,8 @@
(declare-function org-transclusion-org-file-p
"org-transclusion")
+(declare-function org-transclusion-keyword-value-thing-at-point
+ "org-transclusion")
;;;; Setting up the extension
;; Add a new transclusion type
@@ -46,6 +48,8 @@
#'org-transclusion-keyword-value-rest)
(add-hook 'org-transclusion-keyword-value-functions
#'org-transclusion-keyword-value-end)
+(add-hook 'org-transclusion-keyword-value-functions
+ #'org-transclusion-keyword-value-thing-at-point)
;; plist back to string
(add-hook 'org-transclusion-keyword-plist-to-string-functions
#'org-transclusion-keyword-plist-to-string-src-lines)
@@ -62,6 +66,22 @@
;;; Functions
+(defun bounds-of-n-things-at-point (thing count)
+ "Return the bounds of COUNT THING (s) -at-point."
+ (save-excursion
+ (let ((bounds (bounds-of-thing-at-point thing)))
+ (when bounds
+ (push-mark (car bounds) t t)
+ (goto-char (cdr bounds))
+ (while (and (> count 1) bounds)
+ (setq bounds (bounds-of-thing-at-point thing))
+ (when bounds
+ (if (> count 1)
+ (forward-thing thing)
+ (goto-char (cdr bounds)))
+ (setq count (1- count))))
+ (car (region-bounds))))))
+
(defun org-transclusion-add-src-lines (link plist)
"Return a list for non-Org text and source file.
Determine add function based on LINK and PLIST.
@@ -76,8 +96,8 @@ Return nil if PLIST does not contain \":src\" or \":lines\"
properties."
(plist-get plist :end)
;; Link contains a search-option ::<string>
;; and NOT for an Org file
- (and (org-element-property :search-option link)
- (not (org-transclusion-org-file-p (org-element-property :path
link)))))
+ (and (org-element-property :search-option link)
+ (not (org-transclusion-org-file-p (org-element-property :path
link)))))
(append '(:tc-type "lines")
(org-transclusion-content-range-of-lines link plist)))))
@@ -107,7 +127,8 @@ it means from line 10 to the end of file."
(type (org-element-property :type link))
(entry-pos) (buf)
(lines (plist-get plist :lines))
- (end-search-op (plist-get plist :end)))
+ (end-search-op (plist-get plist :end))
+ (thing-at-point (make-symbol (plist-get plist :thing-at-point))))
(if (not (string= type "id")) (setq buf (find-file-noselect path))
(let ((filename-pos (org-id-find path)))
(setq buf (find-file-noselect (car filename-pos)))
@@ -125,15 +146,23 @@ it means from line 10 to the end of file."
;; ::/regex/ or ::number is used
(if (org-link-search search-option)
(line-beginning-position))))))
- ((point-min))))
+ ((point-min))))
+ (bounds (when thing-at-point
+ (let ((count (if end-search-op
+ (string-to-number end-search-op)
1)))
+ (save-excursion
+ (goto-char start-pos)
+ (bounds-of-n-things-at-point thing-at-point
count)))))
+ (start-pos (if thing-at-point (car bounds) start-pos))
(end-pos (when end-search-op
- (save-excursion
- (ignore-errors
- ;; FIXME `org-link-search' does not
- ;; return postion when either ::/regex/
- ;; or ::number is used
- (when (org-link-search end-search-op)
- (line-beginning-position))))))
+ (cond ((when thing-at-point (+ 1 (cdr bounds))))
+ ((save-excursion
+ (ignore-errors
+ ;; FIXME `org-link-search' does not
+ ;; return postion when either ::/regex/
+ ;; or ::number is used
+ (when (org-link-search end-search-op)
+ (line-beginning-position))))))))
(range (when lines (split-string lines "-")))
(lbeg (if range (string-to-number (car range))
0))
@@ -230,12 +259,14 @@ abnormal hook
(let ((lines (plist-get plist :lines))
(src (plist-get plist :src))
(rest (plist-get plist :rest))
- (end (plist-get plist :end)))
+ (end (plist-get plist :end))
+ (thing-at-point (plist-get plist :thing-at-point)))
(concat
(when lines (format ":lines %s" lines))
(when src (format " :src %s" src))
(when rest (format " :rest \"%s\"" rest))
- (when end (format " :end \"%s\"" end)))))
+ (when end (format " :end \"%s\"" end))
+ (when thing-at-point (format " :thing-at-point %s" thing-at-point)))))
(defun org-transclusion-src-lines-p (type)
"Return non-nil when TYPE is \"src\" or \"lines\".
diff --git a/org-transclusion.el b/org-transclusion.el
index 39a53069f0..cf10393a8c 100644
--- a/org-transclusion.el
+++ b/org-transclusion.el
@@ -201,6 +201,7 @@ that consists of the following properties:
(defvar org-transclusion-keyword-value-functions
'(org-transclusion-keyword-value-link
+ org-transclusion-keyword-value-thing-at-point
org-transclusion-keyword-value-level
org-transclusion-keyword-value-disable-auto
org-transclusion-keyword-value-only-contents
@@ -784,6 +785,15 @@ It is meant to be used by
(user-error "Error. Link in #+transclude is mandatory at %d" (point))
nil))
+(defun org-transclusion-keyword-value-thing-at-point (string)
+ "It is a utility function used converting a keyword STRING to plist.
+It is meant to be used by `org-transclusion-get-string-to-plist'.
+It needs to be set in `org-transclusion-get-keyword-values-hook'.
+Double qutations are optional :thing-at-point \"sexp\". The regex should
+match any valid elisp symbol (but please don't quote it)."
+ (when (string-match ":thing-at-point \\([[:alnum:][:punct:]]+\\)" string)
+ (list :thing-at-point (org-strip-quotes (match-string 1 string)))))
+
(defun org-transclusion-keyword-value-disable-auto (string)
"It is a utility function used converting a keyword STRING to plist.
It is meant to be used by `org-transclusion-get-string-to-plist'.
- [elpa] externals/org-transclusion updated (ed141838d0 -> c44071dfb5), ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 6c0352f33a 01/29: Feature: select end via n things at point.,
ELPA Syncer <=
- [elpa] externals/org-transclusion 35ea926477 03/29: Merge branch 'main' into feature--things-at-point, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 4881798b9d 05/29: Nil Safety, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 134c8a645f 04/29: Namespace bounds-of-n-things-at-point, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 310bd28b10 14/29: Augment only needed for magical enter in thing-at-point branch., ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 2bade767cb 15/29: Adapt to magic enter., ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 01a8367387 07/29: Move new-line guarentee to cover all content sources, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 2053106e73 23/29: style(org-transclusion.el): indentation, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 51cac54fed 11/29: Need newline guarentee also in content-src-lines, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 9db0791c07 18/29: refactor: remove unused let variable, ELPA Syncer, 2023/05/08
- [elpa] externals/org-transclusion 1146293107 26/29: Merge pull request #157 from devcarbon-com/feature--things-at-point, ELPA Syncer, 2023/05/08