From: Alexander Adolf <alexander.adolf@condition-alpha.com>
To: Ihor Radchenko <yantar92@posteo.net>
Cc: emacs-orgmode@gnu.org
Subject: Re: columnview dynamic block - different time summing behaviour for EFFORT and CLOCKSUM
Date: Mon, 15 Apr 2024 18:46:58 +0200 [thread overview]
Message-ID: <91dfeb0fed1a1fe0564e5eb9b95a409d@condition-alpha.com> (raw)
In-Reply-To: <87cyqtyzgt.fsf@localhost>
[-- Attachment #1: Type: text/plain, Size: 3663 bytes --]
Many thanks for the pointers, Ihor!
The instructions were clear and concise, so the patch creation went
smoothly. Results attached below.
I cloned the Org repository from git://git.sv.gnu.org/emacs/org-mode.git
and followed the instructions at
https://orgmode.org/worg/org-contribute.html#first-patch. I hope I
succeeded for most part. ;-)
`make compile` didn't complain at all, and `make test` ended with the
following:
---------------------------- Begin Quote -----------------------------
Ran 1254 tests, 1238 results as expected, 4 unexpected, 12 skipped (2024-04-15 18:39:50+0200, 57.383197 sec)
2 expected failures
4 unexpected results:
FAILED ob-calc/matrix-inversion ((should (equal "[[-1, 0.625, -0.125], [0.25, -0.5, 0.25], [0.5, 0.125, -0.125]]" (org-babel-execute-src-block))) :form (equal "[[-1, 0.625, -0.125], [0.25, -0.5, 0.25], [0.5, 0.125, -0.125]]" "[[-1, 625e-3, -125e-3], [250e-3, -500e-3, 250e-3], [500e-3, 125e-3, -125e-3]]") :value nil :explanation (arrays-of-different-length 63 77 "[[-1, 0.625, -0.125], [0.25, -0.5, 0.25], [0.5, 0.125, -0.125]]" "[[-1, 625e-3, -125e-3], [250e-3, -500e-3, 250e-3], [500e-3, 125e-3, -125e-3]]" first-mismatch-at 6))
FAILED test-ob-shell/bash-uses-assoc-arrays ((should (equal "two" (org-trim (org-babel-execute-src-block)))) :form (equal "two" "three") :value nil :explanation (arrays-of-different-length 3 5 "two" "three" first-mismatch-at 1))
FAILED test-ob-shell/bash-uses-assoc-arrays-with-lists ((should (equal "20 cm" (org-trim (org-babel-execute-src-block)))) :form (equal "20 cm" "50 dl") :value nil :explanation (array-elt 0 (different-atoms (50 "#x32" "?2") (53 "#x35" "?5"))))
FAILED test-org-table/sort-lines ((should (equal "| a | x |\n| B | 4 |\n| c | 3 |\n" (org-test-with-temp-text "| <point>a | x |\n| c | 3 |\n| B | 4 |\n" (org-table-sort-lines nil 97) (buffer-string)))) :form (equal "| a | x |\n| B | 4 |\n| c | 3 |\n" #("| B | 4 |\n| a | x |\n| c | 3 |\n" 0 9 (face org-table) 9 10 (face org-table-row) 10 19 (face org-table) 19 20 (face org-table-row) 20 29 (face org-table) 29 30 (face org-table-row))) :value nil :explanation (array-elt 2 (different-atoms (97 "#x61" "?a") (66 "#x42" "?B"))))
12 skipped results:
SKIPPED org-missing-dependency/test-ob-R ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-clojure ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-haskell-ghci ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-julia ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-lua ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-maxima ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-octave ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-python ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-ruby ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-ob-scheme ((skip-unless nil) :form nil :value nil)
SKIPPED org-missing-dependency/test-org-attach-git ((skip-unless nil) :form nil :value nil)
SKIPPED test-org-fold/org-fold-display-inline-images ((skip-unless (not noninteractive)) :form (not t) :value nil)
make: *** [test] Error 1
----------------------------- End Quote ------------------------------
At first glance, nothing seems to point into a direction suggesting that
I had broken anything (i.e. nothing about any breakage relating to
columnview)?
Many thanks and looking forward to your thoughts,
--alexander
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-org-colview.el-add-formatter-parameter-to-colvi.patch --]
[-- Type: text/x-patch, Size: 6568 bytes --]
From c21b18475dd154eed8d3f2489daa5a468531dc82 Mon Sep 17 00:00:00 2001
From: Alexander Adolf <alexander.adolf@condition-alpha.com>
Date: Sun, 14 Apr 2024 18:14:05 +0200
Subject: [PATCH 1/2] lisp/org-colview.el: add formatter parameter to colview
dynamic block
* lisp/org-colview.el (org-dblock-write:column view): Factor out the
existing formatting code to new function
org-columns-dblock-write-default, and honour new dblock parameter
:formatter for specifying a different formatting function.
(org-columns-dblock-write-default): New function with current
formatting code.
(org-columns--capture-view): Amend docstring to better explain the
format of the data being passed to the formatting function.
(org-clock-clocktable-formatter): New option to define a global
default formatting function, defaulting to the current behaviour.
* doc/org-manual.org (Capturing column view): Describe new :formatter
parameter.
* etc/ORG-NEWS (New option ~org-columns-dblock-formatter~): Announce
new option.
(=colview= dynamic block supports custom formatting function):
Describe new custom formatting function feature.
---
doc/org-manual.org | 6 ++++++
etc/ORG-NEWS | 26 ++++++++++++++++++++++++++
lisp/org-colview.el | 38 ++++++++++++++++++++++++++++++++------
3 files changed, 64 insertions(+), 6 deletions(-)
diff --git a/doc/org-manual.org b/doc/org-manual.org
index 6c699ae1e..e66e48cda 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -6012,6 +6012,12 @@ This dynamic block has the following parameters:
Specify a column attribute (see [[*Column attributes]]) for the dynamic
block.
+- =:formatter= ::
+
+ A function for formatting the data in the dynamic block, overriding
+ the default formatting function set in
+ ~org-columns-dblock-formatter~.
+
The following commands insert or update the dynamic block:
- ~org-columns-insert-dblock~ ::
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index e61bd6988..eab181bc3 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -999,6 +999,16 @@ even though it does not have its own ID. By giving files top-level id
properties, links to headlines in the file can also be made more
robust by using the file id instead of the file path.
+*** New option ~org-columns-dblock-formatter~
+
+=colview= dynamic blocks now understand a new ~:formatter~ parameter
+to use a specific function for formatting the contents of the dynamic
+block. This new option can be used to set the global default
+formatting function that will be used for =colview= dynamic blocks
+that do not specify any ~:formatter~ parameter. Its default value (the
+new function ~org-columns-dblock-write-default~) yields the previous
+(fixed) formatting behaviour.
+
** New features
*** =colview= dynamic block now writes column width specifications
@@ -1030,6 +1040,22 @@ Example:
: | PROYECTO EMACS |
: #+END:
+*** =colview= dynamic block supports custom formatting function
+
+The =colview= dynamic block understands a new ~:formatter~ parameter,
+which specifies a user-supplied function to format the data in the
+dynamic block.
+
+A global default formatting function for =colview= dynamic blocks can
+be set via the new option ~org-columns-dblock-formatter~ which
+defaults to the new function ~org-columns-dblock-write-default~, that
+implements the previous (fixed) formatting behaviour. Hence, the
+default behaviour is identical to previous versions.
+
+The global default function can be overridden for any given =colview=
+dynamic block individually by specifying a custom formatter function
+using the new ~:formatter~ parameter on the block's =BEGIN= line.
+
*** =ob-tangle.el=: New flag to remove tangle targets before writing
When ~org-babel-tangle-remove-file-before-write~ is set to ~t~ the
diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index 4718d1db7..5c908affe 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -123,6 +123,13 @@ in `org-columns-summary-types-default', which see."
(function :tag "Summarize")
(function :tag "Collect")))))
+(defcustom org-columns-dblock-formatter #'org-columns-dblock-write-default
+ "Function to format data in column view dynamic blocks.
+For more information, see `org-columns-dblock-write-default'."
+ :group 'org-properties
+ :version "30.0"
+ :package-version '(Org . "9.7")
+ :type 'function)
\f
;;; Column View
@@ -1442,9 +1449,13 @@ that will be excluded from the resulting view. FORMAT is a
format string for columns, or nil. When LOCAL is non-nil, only
capture headings in current subtree.
-This function returns a list containing the title row and all
-other rows. Each row is a list of fields, as strings, or
-`hline'."
+This function returns a list containing the title row and all other
+rows. Each row is either a list, or the symbol `hline'. The first list
+is the heading row as a list of strings with the column titles according
+to FORMAT. All subsequent lists each represent a body row as a list
+whose first element is an integer indicating the outline level of the
+entry, and whose remaining elements are strings with the contents for
+the columns according to FORMAT."
(org-columns (not local) format)
(goto-char org-columns-top-level-marker)
(let ((columns (length org-columns-current-fmt-compiled))
@@ -1545,8 +1556,13 @@ PARAMS is a property list of parameters:
`:vlines'
When non-nil, make each column a column group to enforce
- vertical lines."
- (let ((table
+ vertical lines.
+
+`:formatter'
+
+ A function to format the data and insert it into the buffer."
+ (let ((insert-pos (point))
+ (table
(let ((id (plist-get params :id))
view-file view-pos)
(pcase id
@@ -1573,7 +1589,17 @@ PARAMS is a property list of parameters:
(plist-get params :exclude-tags)
(plist-get params :format)
view-pos)))))
- (width-specs
+ (formatter (or (plist-get params :formatter)
+ org-columns-dblock-formatter
+ #'org-columns-dblock-write-default)))
+ (funcall formatter insert-pos table params)))
+
+(defun org-columns-dblock-write-default (ipos table params)
+ "Write out a columnview table at position IPOS in the current buffer.
+TABLE is a table with data as produced by `org-columns--capture-view'.
+PARAMS is the parameter property list obtained from the dynamic block
+definition."
+ (let ((width-specs
(mapcar (lambda (spec) (nth 2 spec))
org-columns-current-fmt-compiled)))
(when table
--
2.39.3 (Apple Git-146)
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-lisp-org-colview.el-add-link-parameter-to-colview-dy.patch --]
[-- Type: text/x-patch, Size: 4981 bytes --]
From 4d69c3407c7c00fe0a1f52c383ced572f3524076 Mon Sep 17 00:00:00 2001
From: Alexander Adolf <alexander.adolf@condition-alpha.com>
Date: Mon, 15 Apr 2024 18:01:40 +0200
Subject: [PATCH 2/2] lisp/org-colview.el: add link parameter to colview
dynamic block
* lisp/org-colview.el (org-columns--capture-view): Add new link
parameter, which when non-nil causes ITEM headlines to be linked to
their origins.
(org-dblock-write:columnview): Pass new link parameter to
org-columns--capture-view, and explain its use in the docstring.
* doc/org-manual.org (Capturing column view): Describe new :link
parameter.
* etc/ORG-NEWS (=colview= dynamic block can link to headlines):
Describe new link feature.
---
doc/org-manual.org | 5 +++++
etc/ORG-NEWS | 6 ++++++
lisp/org-colview.el | 34 ++++++++++++++++++++++++----------
3 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/doc/org-manual.org b/doc/org-manual.org
index e66e48cda..5e2549f49 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -6007,6 +6007,11 @@ This dynamic block has the following parameters:
When non-~nil~, indent each =ITEM= field according to its level.
+- =:link= ::
+
+ When non-~nil~, link the =ITEM= headlines in the table to their
+ origins.
+
- =:format= ::
Specify a column attribute (see [[*Column attributes]]) for the dynamic
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index eab181bc3..449487ac0 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1056,6 +1056,12 @@ The global default function can be overridden for any given =colview=
dynamic block individually by specifying a custom formatter function
using the new ~:formatter~ parameter on the block's =BEGIN= line.
+*** =colview= dynamic block can link to headlines
+
+The =colview= dynamic block understands a new ~:link~ parameter, which
+when non-~nil~ causes =ITEM= headlines in the table to be linked to
+their origins.
+
*** =ob-tangle.el=: New flag to remove tangle targets before writing
When ~org-babel-tangle-remove-file-before-write~ is set to ~t~ the
diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index 5c908affe..1771283f2 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -1439,15 +1439,15 @@ and variances (respectively) of the individual estimates."
\f
;;; Dynamic block for Column view
-(defun org-columns--capture-view (maxlevel match skip-empty exclude-tags format local)
+(defun org-columns--capture-view (maxlevel match skip-empty exclude-tags link format local)
"Get the column view of the current buffer.
-MAXLEVEL sets the level limit. SKIP-EMPTY tells whether to skip
-empty rows, an empty row being one where all the column view
-specifiers but ITEM are empty. EXCLUDE-TAGS is a list of tags
-that will be excluded from the resulting view. FORMAT is a
-format string for columns, or nil. When LOCAL is non-nil, only
-capture headings in current subtree.
+MAXLEVEL sets the level limit. SKIP-EMPTY tells whether to skip empty
+rows, an empty row being one where all the column view specifiers but
+ITEM are empty. EXCLUDE-TAGS is a list of tags that will be excluded
+from the resulting view. When LINK is non-nil, item headlines will be
+linked to their origins. FORMAT is a format string for columns, or nil.
+When LOCAL is non-nil, only capture headings in current subtree.
This function returns a list containing the title row and all other
rows. Each row is either a list, or the symbol `hline'. The first list
@@ -1467,12 +1467,21 @@ the columns according to FORMAT."
(let (row)
(dotimes (i columns)
(let* ((col (+ (line-beginning-position) i))
- (p (get-char-property col 'org-columns-key)))
- (push (org-quote-vert
+ (p (get-char-property col 'org-columns-key))
+ (cell-content
+ (org-quote-vert
(get-char-property col
(if (string= p "ITEM")
'org-columns-value
- 'org-columns-value-modified)))
+ 'org-columns-value-modified)))))
+ (push (if (and link (string= p "ITEM"))
+ (let ((search (org-link-heading-search-string
+ cell-content)))
+ (org-link-make-string
+ (if (not (buffer-file-name)) search
+ (format "file:%s::%s" (buffer-file-name) search))
+ cell-content))
+ cell-content)
row)))
(unless (or
(and skip-empty
@@ -1558,6 +1567,10 @@ PARAMS is a property list of parameters:
When non-nil, make each column a column group to enforce
vertical lines.
+`:link'
+
+ Link the item headlines in the table to their origins.
+
`:formatter'
A function to format the data and insert it into the buffer."
@@ -1587,6 +1600,7 @@ PARAMS is a property list of parameters:
(plist-get params :match)
(plist-get params :skip-empty-rows)
(plist-get params :exclude-tags)
+ (plist-get params :link)
(plist-get params :format)
view-pos)))))
(formatter (or (plist-get params :formatter)
--
2.39.3 (Apple Git-146)
next prev parent reply other threads:[~2024-04-15 16:48 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-08 21:08 columnview dynamic block - different time summing behaviour for EFFORT and CLOCKSUM Alexander Adolf
2024-04-11 13:44 ` Ihor Radchenko
2024-04-12 12:13 ` Alexander Adolf
2024-04-13 14:19 ` Ihor Radchenko
2024-04-13 16:37 ` Alexander Adolf
2024-04-13 16:55 ` Ihor Radchenko
2024-04-15 16:46 ` Alexander Adolf [this message]
2024-04-19 10:49 ` Ihor Radchenko
2024-04-19 15:35 ` Alexander Adolf
2024-04-19 17:09 ` Ihor Radchenko
2024-04-20 14:30 ` Alexander Adolf
2024-04-21 13:42 ` Ihor Radchenko
2024-04-22 20:41 ` Alexander Adolf
2024-04-23 11:28 ` Ihor Radchenko
2024-04-23 16:27 ` Alexander Adolf
2024-04-23 16:35 ` Ihor Radchenko
2024-04-24 17:29 ` Alexander Adolf
2024-04-26 12:21 ` Ihor Radchenko
2024-04-26 12:38 ` Bastien Guerry
2024-04-26 12:47 ` Ihor Radchenko
2024-04-26 16:07 ` Alexander Adolf
2024-04-28 13:13 ` Ihor Radchenko
2024-04-19 17:26 ` Alexander Adolf
2024-04-24 10:51 ` FAILED test-ob-shell/bash-uses-assoc-arrays Max Nikulin
2024-04-24 12:54 ` Ihor Radchenko
2024-04-24 16:04 ` Max Nikulin
2024-04-26 11:08 ` Ihor Radchenko
2024-04-26 16:41 ` Max Nikulin
2024-04-28 13:11 ` Ihor Radchenko
2024-05-02 10:20 ` [PATCH] test-ob-shell.el: Skip based on feature detection Max Nikulin
2024-05-02 12:57 ` Ihor Radchenko
2024-05-02 12:09 ` columnview dynamic block - different time summing behaviour for EFFORT and CLOCKSUM Ihor Radchenko
2024-05-02 12:36 ` Alexander Adolf
2024-05-02 12:59 ` Ihor Radchenko
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=91dfeb0fed1a1fe0564e5eb9b95a409d@condition-alpha.com \
--to=alexander.adolf@condition-alpha.com \
--cc=emacs-orgmode@gnu.org \
--cc=yantar92@posteo.net \
/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).