首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举org-mode中的所有标签

枚举org-mode中的所有标签
EN

Stack Overflow用户
提问于 2014-06-20 23:39:38
回答 3查看 1.7K关注 0票数 6

如何生成组织模式文件中所有标签(例如:tag:)的枚举列表?假设我有一个表单列表:

代码语言:javascript
复制
* Head1        :foo:bar:
** Subhead1    :foo:
* Head2
** Subhead2    :foo:bar:

我想生成这个文件中所有标签的列表,以及每个标签被使用的次数。像这样说,

代码语言:javascript
复制
:foo:    3
:bar:    2  
EN

回答 3

Stack Overflow用户

发布于 2014-12-17 21:58:49

这是一个简短的版本。

代码语言:javascript
复制
(defun get-tag-counts ()
  (let ((all-tags '()))
    (org-map-entries
     (lambda ()
       (let ((tag-string (car (last (org-heading-components)))))
     (when tag-string   
       (setq all-tags
         (append all-tags (split-string tag-string ":" t)))))))


    ;; now get counts
    (loop for tag in (-uniq all-tags) 
      collect (cons tag (cl-count tag all-tags :test 'string=)))))
票数 4
EN

Stack Overflow用户

发布于 2014-12-17 11:09:00

这是一种方法。

代码语言:javascript
复制
(setq my-hash (make-hash-table :test 'equal))

(org-map-entries
 (lambda ()
   (let ((tag-string (car (last (org-heading-components))))
     (current-count))
     (when tag-string   
       (dolist (tag (split-string tag-string ":" t))

      (setq current-count (gethash tag my-hash))
     (if current-count;
         (puthash tag (+ 1 current-count)  my-hash)
       (puthash tag 1 my-hash))
     )
       )
     )
   )
 )

;; https://github.com/Wilfred/ht.el
(require 'ht)
(ht-map
 (lambda (key value)
   (list key value))
  my-hash)
票数 0
EN

Stack Overflow用户

发布于 2019-06-20 20:49:31

我无法使用John Kitchin发布的代码,因为它需要一个交互功能。来自IRC freenode/#emacs的bpalmer非常友好地帮助了我。请找到一个工作示例,它显示了相应树下面的所有标签。

代码语言:javascript
复制
; use this in order to be able to use loop on its own
(require 'cl)

;; count tags (see John's answer)
(defun get-tag-counts ()
  (let ((all-tags '()))
    (org-map-entries
     (lambda ()
       (let ((tag-string (car (last (org-heading-components)))))
     (when tag-string  
       (setq all-tags
         (append all-tags (split-string tag-string ":" t)))))))

    ;; now get counts
    (loop for tag in (seq-uniq all-tags)
      collect (cons tag (cl-count tag all-tags :test 'string=)))))

;; wrap get-tag-counts in an interactive function
(defun create-tag-counts-buffer () (interactive)
    (let
        ((tags (get-tag-counts)) (b (get-buffer-create "*Org Tag Count*")))
        (dolist (tag tags) (insert (car tag)) (insert "\n")) (display-buffer b)))

请注意,我不能发表评论约翰的答案,因为我的声誉太低。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24330980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档