Hoi, I've been writing a few things using Org where I'm making frequent use of noweb references in SRC blocks, and decided that completion would be handy for them. This function will complete "^<<" with a list of the defined named blocks in the current file, if you're in a SRC block. It could be made smarter (e.g., only offer the completion if ":noweb yes" is set, only offer to complete from named blocks with the same language as the current block), but I thought I'd throw it out here in case anyone else finds it useful. Best, N (defun my/org-src-block-name-backend (command &optional arg &rest ignored) "Complete `<<' with the names of defined SRC blocks." (interactive (list 'interactive)) (cl-case command (interactive (company-begin-backend 'my/org-src-block-name-backend)) (init (require 'org-element)) (prefix (and (eq major-mode 'org-mode) (eq 'src-block (car (org-element-at-point))) (cons (company-grab-line "^<<\\(\\w*\\)" 1) t))) (candidates (org-element-map (org-element-parse-buffer) 'src-block (lambda (src-block) (let ((name (org-element-property :name src-block))) (when name (propertize name :value (org-element-property :value src-block) :annotation (org-element-property :raw-value (org-element-lineage src-block '(headline))))))))) (sorted t) ; Show candidates in same order as doc (ignore-case t) (duplicates nil) ; No need to remove duplicates (post-completion ; Close the reference with ">>" (insert ">>")) ;; Show the contents of the block in a doc-buffer. If you have ;; company-quickhelp-mode enabled it will show in a popup (doc-buffer (company-doc-buffer (get-text-property 0 :value arg))) (annotation (format " [%s]" (get-text-property 0 :annotation arg))))) (add-to-list 'company-backends 'my/org-src-block-name-backend)