mylisp/cygpath.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 14 Dec 2022 00:58:57 +0200
changeset 1767 fd3589f24170
parent 1731 mylisp/cygwin-winpath.el@fec5d1fffe8c
permissions -rw-r--r--
In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     2
;; Handling MSYS paths in NT Emacs.
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     4
(defvar cygpath-msys-root nil
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     5
  "Installation root for MSYS.")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     6
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     7
(defconst cygpath-msys-drive-regex "\\`/\\([a-z]\\)/"
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     8
  "Regex for identifying MSYS(2) drive-like paths.")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
     9
(defconst cygpath-msys-root-dirs (list "bin" "clang32" "clang64" "clangarm64" "etc" "home" "mingw32" "mingw64" "opt" "srv" "tmp" "ucrt64" "usr" "var")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    10
  "Root directories to be recognized as MSYS paths.")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    11
(defun cygpath-msys-root--regex ()
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    12
    "Build regex for matching MSYS root dirs."
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    13
    (format "\\`/%s" (regexp-opt cygpath-msys-root-dirs)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    14
(defconst cygpath-msys-root--regex nil
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    15
    "Regex for matching MSYS root dirs. Automatically regenerated by
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    16
the function `cygpath-msys-root--regex'.")
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    18
(defun cygpath-msys-to-nt (msyspath)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    19
  "Coverts MSYS style path to NT path."
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    20
  (cond
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    21
   ((string-match cygpath-msys-drive-regex msyspath)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    22
    (concat (match-string 1 msyspath) ":\\" (string-replace "/" "\\" (substring msyspath (match-end 0)))))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    23
   ((string-match cygpath-msys-root--regex msyspath)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    24
    (concat cygpath-msys-root (string-replace "/" "\\" msyspath)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    25
   (t msyspath)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    26
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    27
;; (cygpath-msys-to-nt "/c/")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    28
;; (cygpath-msys-to-nt "/c/Users")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    29
;; (setq cygpath-msys-root--regex (cygpath-msys-root--regex))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    30
;; (cygpath-msys-to-nt "/etc/fstab")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    31
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    32
(defun cygpath-msys--mapping-function (op msyspath &rest args)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    33
  (let ((inhibit-file-name-handlers (cons #'cygpath-msys--mapping-function inhibit-file-name-handlers))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    34
        (inhibit-file-name-operation op))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    35
    (apply op (cygpath-msys-to-nt msyspath) args)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    36
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    37
(defvar cygpath-msys-activated nil)
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    39
(defun cygpath-msys--fail-if-not-nt ()
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    40
  (unless (eq system-type 'windows-nt)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    41
    (error "`cygpath-msys' mode makes sense only in NT Emacs."))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    42
  (unless cygpath-msys-root
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    43
    (error "`cygpath-msys-root' is not defined."))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    44
  (unless (file-directory-p cygpath-msys-root)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    45
    (error "`cygpath-msys-root' is a directory.")))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    46
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    47
;;;###autoload
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    48
(defun cygpath-msys-activate ()
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    49
  "Start interpret MSYS(2) paths inside NT Emacs."
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    50
  (interactive)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    51
  (cygpath-msys--fail-if-not-nt)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    52
  (unless cygpath-msys-activated
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    53
    (setq cygpath-msys-root--regex (cygpath-msys-root--regex))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    54
    (mapc (lambda (regex)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    55
            (add-to-list 'file-name-handler-alist (cons regex #'cygpath-msys--mapping-function)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    56
          (list cygpath-msys-drive-regex (cygpath-msys-root--regex)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    57
    (setq cygpath-msys-activated t)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    58
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    59
;;;###autoload
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    60
(defun cygpath-msys-deactivate ()
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    61
  "Stop interpret MSYS(2) paths inside NT Emacs."
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    62
  (interactive)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    63
  (cygpath-msys--fail-if-not-nt)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    64
  (when cygpath-msys-activated
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    65
    (setf file-name-handler-alist (cl-delete #'cygpath-msys--mapping-function file-name-handler-alist :key #'cdr :test #'eq))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    66
    (setq cygpath-msys-activated nil)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    67
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    68
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    69
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    70
;; Handling Windows paths in Cygwin Emacs.
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    71
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    72
(defvar cygpath-nt-cygdrive-prefix "/cygdrive"
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    73
  "For MSYS set to empty string!")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    74
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    75
(defconst cygpath-nt-regex-forward-slash "\\`\\([a-zA-Z]\\):/")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    76
(defconst cygpath-nt-regex-backward-slash "\\`\\([a-zA-Z]\\):\\\\")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    77
(defconst cygpath-nt-regex-list (list cygpath-nt-regex-forward-slash cygpath-nt-regex-backward-slash))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    78
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    79
(defun cygpath-nt-to-cygwin (winpath)
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    80
  (cond
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    81
   ((string-match cygpath-nt-regex-forward-slash winpath)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    82
    (concat cygpath-nt-cygdrive-prefix "/" (downcase (match-string 1 winpath)) "/" (substring winpath (match-end 0))))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    83
   ((string-match cygpath-nt-regex-backward-slash winpath)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    84
    (concat cygpath-nt-cygdrive-prefix "/" (downcase (match-string 1 winpath)) "/" (replace-regexp-in-string "\\\\" "/" (substring winpath (match-end 0)))))
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    85
   (t winpath)))
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    86
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    87
;; (cygpath-nt-to-cygwin "c:/home/my.txt")
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    88
;; (cygpath-nt-to-cygwin "c:\\home\\my.txt")
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    89
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    90
(defun cygpath-nt--mapping-function (op winname &rest args)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    91
  (let ((inhibit-file-name-handlers (cons #'cygpath-nt--mapping-function inhibit-file-name-handlers))
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
        (inhibit-file-name-operation op))
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    93
    (apply op (cygpath-nt-to-cygwin winname) args)))
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    94
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    95
(defvar cygpath-nt-activated nil)
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    96
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
    97
(defun cygpath-nt--fail-if-not-cygwin ()
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    98
  (unless (eq system-type 'cygwin)
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    99
    (error "Mode is suppose to work only inside Cygwin")))
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   100
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   101
;;;###autoload
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   102
(defun cygpath-nt-activate ()
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   103
  "Start interpret Windows paths inside Cygwin Emacs."
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   104
  (interactive)
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   105
  (cygpath-nt--fail-if-not-cygwin)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   106
  (unless cygpath-nt-activated
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   107
    (mapc (lambda (regex)
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   108
            (add-to-list 'file-name-handler-alist (cons regex #'cygpath-nt--mapping-function)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   109
          cygpath-nt-regex-list)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   110
    (setq cygpath-nt-activated t)))
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   111
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   112
;;;###autoload
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   113
(defun cygpath-nt-deactivate ()
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   114
  "Stop interpret Windows paths inside Cygwin Emacs."
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   115
  (interactive)
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   116
  (cygpath-nt--fail-if-not-cygwin)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   117
  (when cygpath-nt-activated
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   118
    (mapc (lambda (regex)
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   119
            (setf file-name-handler-alist (cl-delete regex file-name-handler-alist :key #'car :test #'equal)))
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   120
          cygpath-nt-regex-list)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   121
    (setq cygpath-nt-activated t)))
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   122
1731
fec5d1fffe8c Added mode for recognition of Windows paths in Cygwin Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   123
1767
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   124
(provide 'cygpath-msys)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   125
(provide 'cygpath-nt)
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   126
fd3589f24170 In addition to interpreting Windows paths in Cygwin a handler is added for interpreting MSYS paths in NT Emacs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1731
diff changeset
   127
(provide 'cygpath)