1
0
Fork 0
emacs-config/oni-csharp.el

79 lines
2.8 KiB
EmacsLisp

;;; oni-csharp.el --- C# Configuration -*- lexical-binding: t; -*-
;; Copyright (C) 2019 Tom Willemse
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords: local
;; Version: 20190409014124
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; My C# configuration.
;;; Code:
(defvar oni-csharp--projects (make-hash-table :test 'equal))
(defun oni-csharp-collect-project-names ()
"Go through the current buffer and collect all the project names."
(interactive)
(clrhash oni-csharp--projects)
(save-excursion
(goto-char (point-min))
(while (re-search-forward
(rx bol
"Project(\"{"
(group (minimal-match (1+ (or alphanumeric "-"))))
"}\") = \""
(group (minimal-match (1+ any)))
"\", \""
(minimal-match (1+ any))
"\", \"{"
(group (minimal-match (1+ any)))
"}\""
eol)
nil
:noerror)
(puthash (match-string-no-properties 3)
(match-string-no-properties 2)
oni-csharp--projects))))
(defun oni-csharp-display-project-names ()
"Display the project names in the current buffer."
(interactive)
(save-excursion
(goto-char (point-min))
(remove-overlays (point-min) (point-max) 'oni-csharp--overlayp t)
(while (re-search-forward
(rx bol
(zero-or-more whitespace)
"{"
(group (minimal-match (one-or-more (or alphanumeric "-"))))
"} = {"
(group (minimal-match (one-or-more (or alphanumeric "-"))))
"}"
eol)
nil
:noerror)
(let ((current-overlay (make-overlay (line-beginning-position) (line-end-position))))
(overlay-put current-overlay 'after-string
(propertize (format " => %s" (gethash (match-string 1) oni-csharp--projects))
'face '(:foreground "#808080")))
(overlay-put current-overlay 'oni-csharp--overlayp t)
(overlay-put current-overlay 'evaporate t)))))
(provide 'oni-csharp)
;;; oni-csharp.el ends here