hn api will invole a lot of rest requests which would not be fast for emacs also the data layout is already available at hn webiste, one curl call and then parse them to org would be faster
now what
<table border=”0” class=’comment-tree’> <tr class=’athing comtr ’ id=’20724657’> comment are same level in regard to html node but child comments have different ident block width
top level comment <td class=’ind’><img src=”s.gif” height=”1” width=”0”></td> child
<td class=’ind’><img src=”s.gif” height=”1” width=”40”></td>
https://emacs.stackexchange.com/questions/10245/counting-sub-headings-in-org-mode-using-elisp or recursive on dom will be just fine
don’t know about the performance impact
[[elisp:(find-function 'describe-function)]]
[[elisp:(hnreader-comment 20724363)][read]
;; (setq-local org-confirm-elisp-link-function nil)
user org-add-link-type to avoid confirm message
(org-add-link-type “grep” ‘endless/follow-grep-link)
(defun endless/follow-grep-link (regexp) “Run `rgrep’ with REGEXP as argument.” (grep-compute-defaults) (rgrep regexp “*” (expand-file-name “./”))) https://endlessparentheses.com/use-org-mode-links-for-absolutely-anything.html
use this one
(org-link-set-parameters TYPE &rest PARAMETERS)
Set link TYPE properties to PARAMETERS. PARAMETERS should be :key val pairs. how can i register this handler? autoload?
just a private flag on running
find and replace raw htlm ‘>*’ with ‘>-’
(get-text-property (point) ‘shr-url) (get-text-property (point) ‘htmlize-link) (text-properties-at (point))
(font-lock-multiline t htmlize-link (:uri “elisp:(hnreader-comment 20751164)”) help-echo “LINK: elisp:(hnreader-comment 20751164)” keymap (keymap (follow-link . mouse-face) (mouse-3 . org-find-file-at-mouse) (mouse-2 . org-open-at-mouse)) mouse-face highlight face org-link wrap-prefix #(” ” 0 2 (face org-indent)) line-prefix #(” ” 0 2 (face org-indent)) fontified t)
https://emacs.stackexchange.com/questions/16909/how-can-i-get-all-file-links-in-one-org-mode-file Assuming the current buffer is an org-mode buffer, the following code collects paths of file links in the current buffer.
(org-element-map (org-element-parse-buffer) 'link (lambda (link) (when (string= (org-element-property :type link) "file") (org-element-property :path link))))
In an org buffer, (org-element-parse-buffer) returns the parse tree of the current buffer. And you can map over it with org-element-map.
with the org buffer, run through it find the text prop of htmlize-link
or hack shr insert link
downside is speed, no we need to iterate and look for a tag and then mutate it, the push it back to the dom. Since the dom is a list
you need to map the whole dom
it works but it seems a bit slow (can’t confirm thsi) and long links looks ugly
- get its text properties ‘shr-url and ‘htmlize-link
if they are the same then ok, if not assign htmlize-link to value of ‘shr-url better use https://www.gnu.org/software/emacs/manual/html_node/elisp/Property-Search.html#Property-Search
also need to shadow shr-use-fonts to nil
class fatitem is 4 long when ask it’s 6 items long just take from 1 to the peniculate item with seq-take and seq-drop
a variable to hold history
use pop-to-buffer isn’t what we want, pop-to-buffer-same-window looks the same as switch-to-buffer display-buffer returns windows most of the time, so use it instead with select-window (select-window (display-buffer buf ‘(display-buffer-use-some-window)))
in list pages
(hnreader-read-item “https://news.ycombinator.com/item?id=22603129”) extract id then pass to hnreader-comment https://news.ycombinator.com/item?id=1 it reads comment id actually we don’t need it just read the url instead link can be hidden some where as text properties?just show the links, reply only shows for live discussion
with browser the commtext span includes the reply while with wget they are sibling
the first paragraph is a span, next one is a p. So if comments has only one paragraph it will not be appended with a new line char
shr is can handle this problem, append and empty p node to the dom and let it shr deal with it