I have been looking around the internets and have not come up with a solution. Does anyone know how to jump to a css declaration inside an html file and have a new buffer open with point at or close to that declaration?
After more searching I decided to go with a search open buffers for string approach.
;; CSS search open buffers
(defun search-open-css-buffers-for-region-or-word ()
  "Use the current region/point and search open css buffers"
  (interactive)
  (let (searchTerm)
    (setq searchTerm
          (if (region-active-p)
              (buffer-substring-no-properties (region-beginning) (region-end))
            (thing-at-point 'symbol)))
    (multi-occur (mapcar (lambda (buf)
                           (if (string-match "\w*.css" (buffer-name buf))
                               buf)) (buffer-list))
                 searchTerm 5)))
(global-set-key (kbd "M-s-.") 'search-open-css-buffers-for-region-or-word)
It feels like this is a hack though.
There's a couple of things that make this non-generic:
Having said that, here's an example, for nxml-mode (though it could easily be adapted).
(defun find-css-defun ()
  (interactive)
  (when (memq 'nxml-attribute-value
              (get-text-property (point) 'face))
    (let ((css-buffers
           (mapcar
            (lambda (file)
              (find-file-noselect file))
            (directory-files default-directory t ".*\\.css$"))))
      (multi-occur css-buffers
                   (thing-at-point 'symbol)))))
It works ok.
PS it requires thing-at-point which is in emacs by default these days
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With