Source code for console.beep
'''
.. console - Comprehensive utility library for ANSI terminals.
.. © 2018-2020, Mike Miller - Released under the LGPL, version 3+.
Cross-platform beep functions.
See BoomBox for audio-file playback and tone-generation for sound effects.
'''
import logging
import sys
from sys import stdout
import env
from . import using_terminfo
from console.detection import os_name
from console.constants import BEL
from console.meta import version
log = logging.getLogger(__name__)
def _check_environment():
''' Warn if we're in a audio poor environment. '''
if env.TERM in ('linux', 'fbterm'):
log.debug('Warning: console beep may require `sudo modprobe pcspkr` '
'or an audio playback module such as BoomBox.')
[docs]def beep_curses(**kwargs):
''' Curses beep. '''
_check_environment()
log.debug('trying curses.beep…')
curses.beep()
[docs]def beep_macos(**kwargs):
''' Simple system beep for MacOS. '''
# Note: makes the terminal/app icon in the taskbar jump.
log.debug('trying AppKit.NSBeep…')
from AppKit import NSBeep
NSBeep()
[docs]def beep_posix(**kwargs):
''' Simple system beep for POSIX terminals, may be disabled. '''
_check_environment()
log.debug('outputting BEL…')
stdout.write(BEL)
stdout.flush()
[docs]def beep_windows(**kwargs):
''' Simple system beep for Windows. '''
import winsound
log.debug('trying winsound.MessageBeep…')
winsound.MessageBeep() # the standard windows bell
# ----------------------------------------------------------------------------
beep = lambda *args: log.error('beep impl. not loaded. (%s)', args)
# Load a default implementation at beep()
if os_name == 'nt': # I'm a PC
beep = beep_windows
else:
if using_terminfo:
import curses
curses.initscr()
beep = beep_curses
else:
if sys.platform == 'darwin': # Think different
try:
import AppKit
beep = beep_macos
except ImportError:
AppKit = None
beep = beep_posix
elif os_name == 'posix': # Tron leotards
beep = beep_posix
if __name__ == '__main__':
import sys
from time import sleep
from console import fg, fx, defx
if '-d' in sys.argv:
try:
import out
out.configure(level='debug')
except ImportError:
logging.basicConfig(level='DEBUG',
format=('%(levelname)-7.7s '
f'{fx.dim}%(funcName)s:{fg.green}%(lineno)s{fg.default}{defx.dim}'
' %(message)s'),
)
log.debug('console version: %r', version)
beep()
sleep(.5)