diff options
Diffstat (limited to '.cask/30.2/bootstrap/shut-up-20240429.605/shut-up.el')
| -rw-r--r-- | .cask/30.2/bootstrap/shut-up-20240429.605/shut-up.el | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/.cask/30.2/bootstrap/shut-up-20240429.605/shut-up.el b/.cask/30.2/bootstrap/shut-up-20240429.605/shut-up.el new file mode 100644 index 00000000..6169ebee --- /dev/null +++ b/.cask/30.2/bootstrap/shut-up-20240429.605/shut-up.el @@ -0,0 +1,151 @@ +;;; shut-up.el --- Shut up would you! -*- lexical-binding: t; -*- + +;; Copyright (C) 2013, 2014 Johan Andersson +;; Copyright (C) 2014, 2015 Sebastian Wiesner <swiesner@lunaryorn.com> + +;; Author: Johan Andersson <johan.rejeep@gmail.com> +;; Maintainer: Johan Andersson <johan.rejeep@gmail.com> +;; Package-Requires: ((cl-lib "0.3") (emacs "24")) +;; Package-Version: 20240429.605 +;; Package-Revision: ed62a7fefdf0 +;; URL: http://github.com/rejeep/shut-up.el + +;; This file is NOT part of GNU Emacs. + +;;; License: + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(require 'cl-lib) +(eval-when-compile + (defvar dired-use-ls-dired)) + +;; NOTE: This variable has been added in most recent version of +;; Emacs. It's declared here to support lexical binding and to avoid +;; compiler warnings. +(defvar inhibit-message nil) + +(defvar shut-up-ignore nil + "When non-nil, do not hide output inside `shut-up'. + +Changes to this variable inside a `shut-up' block has no +effect.") + +;; Preserve the original definition of `write-region' +(unless (fboundp 'shut-up-write-region-original) + (fset 'shut-up-write-region-original (symbol-function 'write-region))) + +(defun shut-up-write-region (start end filename + &optional append visit lockname mustbenew) + "Like `write-region', but try to suppress any messages." + (unless visit + (setq visit 'no-message)) + ;; Call our "copy" of `write-region', because if this function is used to + ;; override `write-region', calling `write-region' directly here would result + ;; in any endless recursion. + (shut-up-write-region-original start end filename + append visit lockname mustbenew)) + +(unless (fboundp 'shut-up-load-original) + (fset 'shut-up-load-original (symbol-function 'load))) + +(defun shut-up-load (file &optional noerror _nomessage nosuffix must-suffix) + "Like `load', but try to be quiet about it." + (shut-up-load-original file noerror :nomessage nosuffix must-suffix)) + +(defun shut-up-buffer-string (buffer) + "Get the contents of BUFFER. + +When BUFFER is alive, return its contents without properties. +Otherwise return nil." + (when (buffer-live-p buffer) + (with-current-buffer buffer + (buffer-substring-no-properties (point-min) (point-max))))) + +(defun shut-up-insert-to-buffer (object buffer) + "Insert OBJECT into BUFFER. + +If BUFFER is not live, do nothing." + (when (buffer-live-p buffer) + (with-current-buffer buffer + (cl-typecase object + (character (insert-char object 1)) + (string (insert object)) + (t (princ object #'insert-char)))))) + +;;;###autoload +(defmacro shut-up (&rest body) + "Evaluate BODY with silenced output. + +While BODY is evaluated, all output is redirected to a buffer, +unless `shut-up-ignore' is non-nil. This affects: + +- `message' +- All functions using `standard-output' (e.g. `print', `princ', etc.) + +Inside BODY, the buffer is bound to the lexical variable +`shut-up-sink'. Additionally provide a lexical function +`shut-up-current-output', which returns the current contents of +`shut-up-sink' when called with no arguments. + +Changes to the variable `shut-up-ignore' inside BODY does not +have any affect." + (declare (indent 0)) + `(let ((shut-up-sink (generate-new-buffer " *shutup*")) + (inhibit-message t)) + (cl-labels ((shut-up-current-output () (or (shut-up-buffer-string shut-up-sink) ""))) + (if shut-up-ignore + (progn ,@body) + (unwind-protect + ;; Override `standard-output', for `print' and friends, and + ;; monkey-patch `message' + (cl-letf ((standard-output + (lambda (char) + (shut-up-insert-to-buffer char shut-up-sink))) + ((symbol-function 'message) + (lambda (fmt &rest args) + (when fmt + (let ((text (apply #'format fmt args))) + (shut-up-insert-to-buffer (concat text "\n") shut-up-sink) + text)))) + ((symbol-function 'write-region) #'shut-up-write-region) + ((symbol-function 'load) #'shut-up-load)) + ,@body) + (and (buffer-name shut-up-sink) + (kill-buffer shut-up-sink))))))) + +;;;###autoload +(defun shut-up-silence-emacs () + "Silence Emacs. + +Change Emacs settings to reduce the output. + +WARNING: This function has GLOBAL SIDE-EFFECTS. You should only +call this function in `noninteractive' sessions." + ;; Loading vc-git... + (remove-hook 'find-file-hooks 'vc-find-file-hook) + + ;; ls does not support --dired; see `dired-use-ls-dired' for more details. + (eval-after-load "dired" + '(setq dired-use-ls-dired nil))) + +(provide 'shut-up) + +;;; shut-up.el ends here |
