Function: klink:create-link

klink:create-link is an autoloaded, interactive and byte-compiled function defined in klink.el.

Signature

(klink:create-link REFERENCE)

Documentation

Return a klink implicit link string to REFERENCE.

REFERENCE should be a cell-ref or a string containing "filename#cell-ref". See documentation for kcell:ref-to-id for valid cell-ref formats.

Key Bindings

Source Code

;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/kotl/klink.el
;;;###autoload
(defun klink:create-link (reference)
  "Return a klink implicit link string to REFERENCE.
REFERENCE should be a cell-ref or a string containing \"filename#cell-ref\".
See documentation for `kcell:ref-to-id' for valid cell-ref formats."
  (interactive
   (progn
     ;; This `default-directory' setting is referenced in "hargs.el" for argument getting.
     (hattr:set 'hbut:current 'dir default-directory)
     (save-excursion
       (hargs:iform-read
	'(interactive "*+LLink to <[file]#cell-id[|vspecs]>: ")))))

  ;; Reference generally is a string.  It may be a list as a string, e.g.
  ;; "(\"file\" \"cell\")", in which case, we remove the unneeded internal
  ;; double quotes and then parse it with pattern matching.
  (and (stringp reference) (> (length reference) 0)
       (eq (aref reference 0) ?\()
       (setq reference (replace-regexp-in-string "\\\"" "" reference nil t)))
  ;; This `default-directory' setting is referenced in "hargs.el" for
  ;; getting arguments.
  (hattr:set 'hbut:current 'dir default-directory)
  (let (file-ref cell-ref klink)
    (setq reference (klink:parse reference)
	  file-ref  (car reference)
	  cell-ref  (nth 1 reference))
    ;; Don't need filename if link is to a cell in current buffer.
    (when (and file-ref (equal (hypb:buffer-file-name)
			       (expand-file-name file-ref default-directory)))
      (setq file-ref nil))
    (setq klink (cond (file-ref
		       (setq file-ref (hpath:relative-to file-ref))
		       ;; Remove "./" prefix, if any.
		       (when (string-match "^\\./" file-ref)
			 (setq file-ref (substring file-ref (match-end 0))))
		       (concat "<" file-ref
			       (when cell-ref
				 (concat "#" cell-ref))
			       ">"))
		      (cell-ref (concat "<#" cell-ref ">"))
		      (t  (error "(klink:create-link) Invalid reference, `%s'" reference))))
    (klink:set-yank-handler klink)))