I took a stab at this implementation here: https://github.com/jkitchin/org-mode/compare/master...colored-link-2?expand=1
I wasn't too sure of the defcustom :type syntax. I also wasn't sure about this line https://github.com/jkitchin/org-mode/compare/master...colored-link-2?expand=1#diff-cfe1a32c56525d13db03755dbd7b4a01R6069 I set the invisible spec to whatever you set :display to, or 'org-link. However, if you set :display to t, it still gets folded. I thought any non-nil value that wasn't 'org-link would work, but apparently not. What do you think about this? With that patch, you can do this: Run this to set the display of doi links #+BEGIN_SRC emacs-lisp (setq org-link-display-parameters '(("doi" :face (:foreground "red" :underline t :weight bold) :display 'full))) #+END_SRC And then the doi links are bold, underlined red, and not folded in descriptive mode. doi:10.1021 bracketed: [[doi:test][what]] bracketed file link: [[file:test.org][test]] Nicolas Goaziou writes: > Hello, > > John Kitchin <jkitc...@andrew.cmu.edu> writes: > >> I tried this aproach to enable custom colored links in org-mode if an >> org-link-type face is defined. If no face is applied, then it just gets >> the default org-link face >> >> For example this will make all doi links red. >> >> (defface org-link-doi >> `((t (:inherit org-link >> :foreground "red"))) >> "Color for doi links.") >> >> It seems to work pretty well for me. What do you think about making this >> a feature in org-mode? > > This sounds like a good idea. Thank you for submitting it. > > However, I'm not convinced by the UI, i.e., creating a face specifically > named to trigger the feature. As a user, it doesn't seem very natural to > me. > > At first I thought it was better to extend `org-add-link-type' with > a FACE definition, but we wouldn't have caught default link types. > > So, maybe it is more reasonable to create a new variable, e.g., > `org-link-display-parameters', which would hold an alist between link > types and property lists (or something else), e.g., > > ("doi" :face my-special-face :display full) > ("special" :display path) > > Note that :display is a way to include your other idea about link > visibility. Default value for :face and :display would be, respectively, > `org-link' and `description'. > > Of course, we can also create two variables, one for the face, the other > for the visibility. > > WDYT? > > Regards, -- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu