coq: nix-buffer: Inherit variables to PG shell
This commit is contained in:
parent
abe0da425b
commit
b1b61d0988
@ -46,6 +46,37 @@ self = stdenv.mkDerivation {
|
||||
(mapc (lambda (arg)
|
||||
(when (file-directory-p (concat arg "/lib/coq/${coq-version}/user-contrib"))
|
||||
(setenv "COQPATH" (concat (getenv "COQPATH") ":" arg "/lib/coq/${coq-version}/user-contrib")))) '(${stdenv.lib.concatStringsSep " " (map (pkg: "\"${pkg}\"") pkgs)}))
|
||||
; TODO Abstract this pattern from here and nixBufferBuilders.withPackages!
|
||||
(defvar nixpkgs--coq-buffer-count 0)
|
||||
(when (eq nixpkgs--coq-buffer-count 0)
|
||||
(make-variable-buffer-local 'nixpkgs--is-nixpkgs-coq-buffer)
|
||||
(defun nixpkgs--coq-inherit (buf)
|
||||
(inherit-local-inherit-child buf)
|
||||
(with-current-buffer buf
|
||||
(setq nixpkgs--coq-buffer-count (1+ nixpkgs--coq-buffer-count))
|
||||
(add-hook 'kill-buffer-hook 'nixpkgs--decrement-coq-buffer-count nil t))
|
||||
buf)
|
||||
; When generating a scomint buffer, do inherit-local inheritance and make it a nixpkgs-coq buffer
|
||||
(defun nixpkgs--around-scomint-make (orig &rest r)
|
||||
(if nixpkgs--is-nixpkgs-coq-buffer
|
||||
(progn
|
||||
(advice-add 'get-buffer-create :filter-return #'nixpkgs--coq-inherit)
|
||||
(apply orig r)
|
||||
(advice-remove 'get-buffer-create #'nixpkgs--coq-inherit))
|
||||
(apply orig r)))
|
||||
(advice-add 'scomint-make :around #'nixpkgs--around-scomint-make)
|
||||
; When we have no more coq buffers, tear down the buffer handling
|
||||
(defun nixpkgs--decrement-coq-buffer-count ()
|
||||
(setq nixpkgs--coq-buffer-count (1- nixpkgs--coq-buffer-count))
|
||||
(when (eq nixpkgs--coq-buffer-count 0)
|
||||
(advice-remove 'scomint-make #'nixpkgs--around-scomint-make)
|
||||
(fmakunbound 'nixpkgs--around-scomint-make)
|
||||
(fmakunbound 'nixpkgs--coq-inherit)
|
||||
(fmakunbound 'nixpkgs--decrement-coq-buffer-count))))
|
||||
(setq nixpkgs--coq-buffer-count (1+ nixpkgs--coq-buffer-count))
|
||||
(add-hook 'kill-buffer-hook 'nixpkgs--decrement-coq-buffer-count nil t)
|
||||
(setq nixpkgs--is-nixpkgs-coq-buffer t)
|
||||
(inherit-local 'nixpkgs--is-nixpkgs-coq-buffer)
|
||||
'';
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user