+(defun elpher-get-address-url (address)
+ "Get URL representation of ADDRESS."
+ (concat "gopher://"
+ (elpher-address-host address)
+ (let ((port (elpher-address-port address)))
+ (if (equal port 70)
+ ""
+ (format ":%d" port)))
+ "/" (string (elpher-address-type address))
+ (elpher-address-selector address)))
+
+(defun elpher-copy-node-url (node)
+ "Copy URL representation of address of NODE to `kill-ring'."
+ (let ((address (elpher-node-address node)))
+ (if address
+ (let ((url (elpher-get-address-url address)))
+ (message url)
+ (kill-new url))
+ (error (format "Cannot represent %s as URL" (elpher-node-display-string node))))))
+
+(defun elpher-copy-link-url ()
+ "Copy URL of item at point to `kill-ring'."
+ (interactive)
+ (let ((button (button-at (point))))
+ (if button
+ (elpher-copy-node-url (button-get button 'elpher-node))
+ (error "No item selected"))))
+
+(defun elpher-copy-current-url ()
+ "Copy URL of current node to `kill-ring'."
+ (interactive)
+ (elpher-copy-node-url elpher-current-node))
+