Added the new scripts. Removed comicthumb 😥
This commit is contained in:
parent
6b197746fc
commit
7a0892563d
17
aur-restore.sh
Executable file
17
aur-restore.sh
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This script restores local aur repository after fuckup with cleaning which
|
||||
# happens way too often for me
|
||||
|
||||
echo "Creating custom repository..."
|
||||
sudo install -d /var/cache/pacman/custom -o lanxu
|
||||
repo-add /var/cache/pacman/custom/custom.db.tar
|
||||
aur sync -u
|
||||
|
||||
echo "Retrieving aur packages which are installed..."
|
||||
pacman -Qm | cut -f 1 -d " " > aur-packages.txt
|
||||
|
||||
echo "Installing..."
|
||||
xargs -a aur-packages.txt aur sync
|
||||
|
||||
echo "Done."
|
358
comicthumb.py
358
comicthumb.py
|
@ -1,358 +0,0 @@
|
|||
#!/usr/bin/env python2
|
||||
"""thumbnail.py - Thumbnail module for MComix implementing (most of) the
|
||||
freedesktop.org "standard" at http://jens.triq.net/thumbnail-spec/
|
||||
"""
|
||||
import sys
|
||||
import urllib2
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import tempfile
|
||||
import mimetypes
|
||||
import threading
|
||||
import itertools
|
||||
import traceback
|
||||
import PIL.Image as Image
|
||||
import gtk
|
||||
from urllib import pathname2url
|
||||
|
||||
try: # The md5 module is deprecated as of Python 2.5, replaced by hashlib.
|
||||
from hashlib import md5
|
||||
except ImportError:
|
||||
from md5 import new as md5
|
||||
|
||||
from mcomix.preferences import prefs
|
||||
from mcomix import archive_extractor
|
||||
from mcomix import constants
|
||||
from mcomix import archive_tools
|
||||
from mcomix import tools
|
||||
from mcomix import image_tools
|
||||
from mcomix import portability
|
||||
from mcomix import i18n
|
||||
from mcomix import callback
|
||||
from mcomix import log
|
||||
|
||||
|
||||
class Thumbnailer(object):
|
||||
""" The Thumbnailer class is responsible for managing MComix
|
||||
internal thumbnail creation. Depending on its settings,
|
||||
it either stores thumbnails on disk and retrieves them later,
|
||||
or simply creates new thumbnails each time it is called. """
|
||||
|
||||
def __init__(self, dst_dir=constants.THUMBNAIL_PATH, store_on_disk=None,
|
||||
size=None, force_recreation=False, archive_support=False, multiple_previews=False):
|
||||
"""
|
||||
<dst_dir> set the thumbnailer's storage directory.
|
||||
|
||||
If <store_on_disk> on disk is True, it changes the thumbnailer's
|
||||
behaviour to store files on disk, or just create new thumbnails each
|
||||
time it was called when set to False. Defaults to the 'create
|
||||
thumbnails' preference if not set.
|
||||
|
||||
The dimensions for the created thumbnails is set by <size>, a (width,
|
||||
height) tupple. Defaults to the 'thumbnail size' preference if not set.
|
||||
|
||||
If <force_recreation> is True, thumbnails stored on disk
|
||||
will always be re-created instead of being re-used.
|
||||
|
||||
If <archive_support> is True, support for archive thumbnail creation
|
||||
(based on cover detection) is enabled. Otherwise, only image files are
|
||||
supported.
|
||||
"""
|
||||
self.dst_dir = dst_dir
|
||||
if store_on_disk is None:
|
||||
self.store_on_disk = prefs['create thumbnails']
|
||||
else:
|
||||
self.store_on_disk = store_on_disk
|
||||
if size is None:
|
||||
self.width = self.height = prefs['thumbnail size']
|
||||
self.default_sizes = True
|
||||
else:
|
||||
self.width, self.height = size
|
||||
self.default_sizes = False
|
||||
self.force_recreation = force_recreation
|
||||
self.archive_support = archive_support
|
||||
self.multiple_previews = multiple_previews
|
||||
|
||||
def thumbnail(self, filepath, async=False):
|
||||
""" Returns a thumbnail pixbuf for <filepath>, transparently handling
|
||||
both normal image files and archives. If a thumbnail file already exists,
|
||||
it is re-used. Otherwise, a new thumbnail is created from <filepath>.
|
||||
|
||||
Returns None if thumbnail creation failed, or if the thumbnail creation
|
||||
is run asynchrounosly. """
|
||||
|
||||
# Update width and height from preferences if they haven't been set explicitly
|
||||
if self.default_sizes:
|
||||
self.width = prefs['thumbnail size']
|
||||
self.height = prefs['thumbnail size']
|
||||
|
||||
if self._thumbnail_exists(filepath):
|
||||
thumbpath = self._path_to_thumbpath(filepath)
|
||||
pixbuf = image_tools.load_pixbuf(thumbpath)
|
||||
self.thumbnail_finished(filepath, pixbuf)
|
||||
return pixbuf
|
||||
|
||||
else:
|
||||
if async:
|
||||
thread = threading.Thread(target=self._create_thumbnail, args=(filepath,))
|
||||
thread.name += '-thumbnailer'
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
return None
|
||||
else:
|
||||
return self._create_thumbnail(filepath)
|
||||
|
||||
@callback.Callback
|
||||
def thumbnail_finished(self, filepath, pixbuf):
|
||||
""" Called every time a thumbnail has been completed.
|
||||
<filepath> is the file that was used as source, <pixbuf> is the
|
||||
resulting thumbnail. """
|
||||
|
||||
pass
|
||||
|
||||
def delete(self, filepath):
|
||||
""" Deletes the thumbnail for <filepath> (if it exists) """
|
||||
thumbpath = self._path_to_thumbpath(filepath)
|
||||
if os.path.isfile(thumbpath):
|
||||
try:
|
||||
os.remove(thumbpath)
|
||||
except IOError, error:
|
||||
log.error(_("! Could not remove file \"%s\""), thumbpath)
|
||||
log.error(error)
|
||||
|
||||
def _create_thumbnail_pixbuf(self, filepath):
|
||||
""" Creates a thumbnail pixbuf from <filepath>, and returns it as a
|
||||
tuple along with a file metadata dictionary: (pixbuf, tEXt_data) """
|
||||
|
||||
if self.archive_support:
|
||||
mime = archive_tools.archive_mime_type(filepath)
|
||||
else:
|
||||
mime = None
|
||||
if mime is not None:
|
||||
cleanup = []
|
||||
try:
|
||||
tmpdir = tempfile.mkdtemp(prefix=u'mcomix_archive_thumb.')
|
||||
cleanup.append(lambda: shutil.rmtree(tmpdir, True))
|
||||
archive = archive_tools.get_recursive_archive_handler(filepath,
|
||||
tmpdir,
|
||||
type=mime)
|
||||
if archive is None:
|
||||
return None, None
|
||||
cleanup.append(archive.close)
|
||||
files = archive.list_contents()
|
||||
wanted = self._guess_cover(files)
|
||||
if wanted is None:
|
||||
return None, None
|
||||
|
||||
archive.extract(wanted, tmpdir)
|
||||
|
||||
image_path = os.path.join(tmpdir, wanted)
|
||||
if not os.path.isfile(image_path):
|
||||
return None, None
|
||||
|
||||
if self.multiple_previews:
|
||||
number_of_files = len(files)
|
||||
pixbuf1 = image_tools.load_pixbuf_size(image_path, self.width/2, self.height/2)
|
||||
""" Extract 3 images """
|
||||
jump = number_of_files / 4
|
||||
frames = [jump*1, jump*2, jump*3]
|
||||
|
||||
pixbufs = [pixbuf1]
|
||||
has_alpha = False
|
||||
for frame in frames:
|
||||
archive.extract(files[frame], tmpdir)
|
||||
image_path = os.path.join(tmpdir, files[frame])
|
||||
if not os.path.isfile(image_path):
|
||||
return None, None
|
||||
pixbuf_temp = image_tools.load_pixbuf_size(image_path, self.width/2, self.height/2)
|
||||
pixbufs.append(pixbuf_temp)
|
||||
if pixbuf_temp.get_property('has-alpha'):
|
||||
has_alpha = True
|
||||
bits_per_sample = 8
|
||||
has_alpha = True
|
||||
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, has_alpha, bits_per_sample, self.width, self.height)
|
||||
pixbuf.fill(0x00000000)
|
||||
offsets = [[0, 0], [self.width/2, 0], [0, self.height/2], [self.width/2, self.height/2]]
|
||||
for buf in pixbufs:
|
||||
idx = pixbufs.index(buf)
|
||||
src_w = buf.get_property('width')
|
||||
src_h = buf.get_property('height')
|
||||
|
||||
center_x = (self.width / 2 - src_w) / 2
|
||||
center_y = (self.height / 2 - src_h) / 2
|
||||
|
||||
buf.copy_area(0, 0, src_w, src_h, pixbuf, center_x + offsets[idx][0], center_y + offsets[idx][1])
|
||||
|
||||
#pixbufs[1].copy_area(0, 0, pixbufs[1].get_property('width'), pixbufs[1].get_property('height'), pixbuf, self.width/2, 0)
|
||||
#pixbufs[2].copy_area(0, 0, pixbufs[2].get_property('width'), pixbufs[2].get_property('height'), pixbuf, 0, self.height/2)
|
||||
#pixbufs[3].copy_area(0, 0, pixbufs[3].get_property('width'), pixbufs[3].get_property('height'), pixbuf, self.width/2, self.height/2)
|
||||
else:
|
||||
pixbuf = image_tools.load_pixbuf_size(image_path, self.width, self.height)
|
||||
if self.store_on_disk:
|
||||
tEXt_data = self._get_text_data(image_path)
|
||||
# Use the archive's mTime instead of the extracted file's mtime
|
||||
tEXt_data['tEXt::Thumb::MTime'] = str(long(os.stat(filepath).st_mtime))
|
||||
else:
|
||||
tEXt_data = None
|
||||
|
||||
return pixbuf, tEXt_data
|
||||
finally:
|
||||
for fn in reversed(cleanup):
|
||||
fn()
|
||||
|
||||
elif image_tools.is_image_file(filepath):
|
||||
pixbuf = image_tools.load_pixbuf_size(filepath, self.width, self.height)
|
||||
if self.store_on_disk:
|
||||
tEXt_data = self._get_text_data(filepath)
|
||||
else:
|
||||
tEXt_data = None
|
||||
|
||||
return pixbuf, tEXt_data
|
||||
else:
|
||||
return None, None
|
||||
|
||||
def _create_thumbnail(self, filepath):
|
||||
""" Creates the thumbnail pixbuf for <filepath>, and saves the pixbuf
|
||||
to disk if necessary. Returns the created pixbuf, or None, if creation failed. """
|
||||
|
||||
pixbuf, tEXt_data = self._create_thumbnail_pixbuf(filepath)
|
||||
self.thumbnail_finished(filepath, pixbuf)
|
||||
|
||||
if pixbuf and self.store_on_disk:
|
||||
thumbpath = self._path_to_thumbpath(filepath)
|
||||
self._save_thumbnail(pixbuf, thumbpath, tEXt_data)
|
||||
|
||||
return pixbuf
|
||||
|
||||
def _get_text_data(self, filepath):
|
||||
""" Creates a tEXt dictionary for <filepath>. """
|
||||
mime = mimetypes.guess_type(filepath)[0] or "unknown/mime"
|
||||
uri = portability.uri_prefix() + pathname2url(i18n.to_utf8(os.path.normpath(filepath)))
|
||||
stat = os.stat(filepath)
|
||||
# MTime could be floating point number, so convert to long first to have a fixed point number
|
||||
mtime = str(long(stat.st_mtime))
|
||||
size = str(stat.st_size)
|
||||
format, (width, height), providers = image_tools.get_image_info(filepath)
|
||||
return {
|
||||
'tEXt::Thumb::URI': uri,
|
||||
'tEXt::Thumb::MTime': mtime,
|
||||
'tEXt::Thumb::Size': size,
|
||||
'tEXt::Thumb::Mimetype': mime,
|
||||
'tEXt::Thumb::Image::Width': str(width),
|
||||
'tEXt::Thumb::Image::Height': str(height),
|
||||
'tEXt::Software': 'MComix %s' % constants.VERSION
|
||||
}
|
||||
|
||||
def _save_thumbnail(self, pixbuf, thumbpath, tEXt_data):
|
||||
""" Saves <pixbuf> as <thumbpath>, with additional metadata
|
||||
from <tEXt_data>. If <thumbpath> already exists, it is overwritten. """
|
||||
|
||||
try:
|
||||
directory = os.path.dirname(thumbpath)
|
||||
if not os.path.isdir(directory):
|
||||
os.makedirs(directory, 0700)
|
||||
if os.path.isfile(thumbpath):
|
||||
os.remove(thumbpath)
|
||||
|
||||
pixbuf.save(thumbpath, 'png', tEXt_data)
|
||||
os.chmod(thumbpath, 0600)
|
||||
|
||||
except Exception, ex:
|
||||
log.warning( _('! Could not save thumbnail "%(thumbpath)s": %(error)s'),
|
||||
{ 'thumbpath' : thumbpath, 'error' : ex } )
|
||||
|
||||
def _thumbnail_exists(self, filepath):
|
||||
""" Checks if the thumbnail for <filepath> already exists.
|
||||
This function will return False if the thumbnail exists
|
||||
and it's mTime doesn't match the mTime of <filepath>,
|
||||
it's size is different from the one specified in the thumbnailer,
|
||||
or if <force_recreation> is True. """
|
||||
|
||||
if not self.force_recreation:
|
||||
thumbpath = self._path_to_thumbpath(filepath)
|
||||
|
||||
if os.path.isfile(thumbpath):
|
||||
# Check the thumbnail's stored mTime
|
||||
try:
|
||||
img = Image.open(thumbpath)
|
||||
except IOError:
|
||||
return False
|
||||
|
||||
info = img.info
|
||||
stored_mtime = long(info['Thumb::MTime'])
|
||||
# The source file might no longer exist
|
||||
file_mtime = os.path.isfile(filepath) and long(os.stat(filepath).st_mtime) or stored_mtime
|
||||
return stored_mtime == file_mtime and \
|
||||
max(*img.size) == max(self.width, self.height)
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def _path_to_thumbpath(self, filepath):
|
||||
""" Converts <path> to an URI for the thumbnail in <dst_dir>. """
|
||||
uri = portability.uri_prefix() + pathname2url(i18n.to_utf8(os.path.normpath(filepath)))
|
||||
return self._uri_to_thumbpath(uri)
|
||||
|
||||
def _uri_to_thumbpath(self, uri):
|
||||
""" Return the full path to the thumbnail for <uri> with <dst_dir>
|
||||
being the base thumbnail directory. """
|
||||
md5hash = md5(uri).hexdigest()
|
||||
thumbpath = os.path.join(self.dst_dir, md5hash + '.png')
|
||||
return thumbpath
|
||||
|
||||
def _guess_cover(self, files):
|
||||
"""Return the filename within <files> that is the most likely to be the
|
||||
cover of an archive using some simple heuristics.
|
||||
"""
|
||||
# Ignore MacOSX meta files.
|
||||
files = itertools.ifilter(lambda filename:
|
||||
u'__MACOSX' not in os.path.normpath(filename).split(os.sep),
|
||||
files)
|
||||
# Ignore credit files if possible.
|
||||
files = itertools.ifilter(lambda filename:
|
||||
u'credit' not in os.path.split(filename)[1].lower(), files)
|
||||
|
||||
images = list(itertools.ifilter(image_tools.is_image_file, files))
|
||||
|
||||
tools.alphanumeric_sort(images)
|
||||
|
||||
front_re = re.compile('(cover|front)', re.I)
|
||||
candidates = filter(front_re.search, images)
|
||||
candidates = [c for c in candidates if 'back' not in c.lower()]
|
||||
|
||||
if candidates:
|
||||
return candidates[0]
|
||||
|
||||
if images:
|
||||
return images[0]
|
||||
|
||||
return None
|
||||
if __name__ == '__main__':
|
||||
argv = portability.get_commandline_args()
|
||||
try:
|
||||
in_path = argv[0]
|
||||
out_path = argv[1]
|
||||
if len(argv) == 3:
|
||||
size = int(argv[2])
|
||||
else:
|
||||
size = 128
|
||||
except:
|
||||
print __doc__
|
||||
sys.exit(1)
|
||||
|
||||
if in_path.startswith('file://'):
|
||||
in_path = urllib2.unquote(in_path[7:])
|
||||
|
||||
thumbnailer = Thumbnailer(force_recreation=True,
|
||||
archive_support=True,
|
||||
store_on_disk=False,
|
||||
size=(size, size),
|
||||
multiple_previews=True)
|
||||
thumb = thumbnailer.thumbnail(in_path)
|
||||
thumb.save(out_path, 'png')
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
# vim: expandtab:sw=4:ts=4
|
10
dunst_message.sh
Executable file
10
dunst_message.sh
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
appname=$1
|
||||
sound="message"
|
||||
|
||||
if [ "$appname" = "Telegram-desktop" ]; then
|
||||
sound="window-attention"
|
||||
fi
|
||||
|
||||
mpv --no-terminal /usr/share/sounds/freedesktop/stereo/$sound.oga&
|
70
gputemp.py
70
gputemp.py
|
@ -1,45 +1,55 @@
|
|||
#!/usr/bin/python
|
||||
import os
|
||||
|
||||
import re
|
||||
import logging
|
||||
import subprocess
|
||||
import lib.helpers as helpers
|
||||
from subprocess import check_output
|
||||
import lib.helpers as helpers
|
||||
|
||||
FORMAT = "%(asctime)s %(levelname)s %(message)s"
|
||||
logging.basicConfig(format=FORMAT, filename=__file__+'.log', level=logging.DEBUG)
|
||||
|
||||
aticonfig_available = helpers.is_exe("/usr/bin/aticonfig")
|
||||
sensors_available = helpers.is_exe("/usr/bin/sensors")
|
||||
ATICONFIG_AVAILABLE = helpers.is_exe("/usr/bin/aticonfig")
|
||||
SENSORS_AVAILABLE = helpers.is_exe("/usr/bin/sensors")
|
||||
|
||||
if sensors_available:
|
||||
commands = ["sensors amdgpu-pci-* | grep temp1", "sensors radeon-pci-* | grep temp1", "sensors thinkpad-isa-0000 | grep ATI"]
|
||||
def get_temperature():
|
||||
command = None
|
||||
|
||||
for try_command in commands:
|
||||
command = try_command
|
||||
try:
|
||||
return_command = check_output(command, stderr=subprocess.STDOUT, shell=True)
|
||||
if return_command is not None:
|
||||
break
|
||||
except subprocess.CalledProcessError as commandexc:
|
||||
continue
|
||||
if SENSORS_AVAILABLE:
|
||||
commands = ["sensors amdgpu-pci-0800 | grep edge",
|
||||
"sensors radeon-pci-* | grep temp1",
|
||||
"sensors thinkpad-isa-0000 | grep ATI"]
|
||||
|
||||
if aticonfig_available:
|
||||
command = "aticonfig --odgt"
|
||||
for try_command in commands:
|
||||
try:
|
||||
return_command = check_output(try_command, stderr=subprocess.STDOUT, shell=True)
|
||||
if return_command is not None:
|
||||
command = try_command
|
||||
break
|
||||
except subprocess.CalledProcessError as commandexc:
|
||||
continue
|
||||
|
||||
# Run command
|
||||
if ATICONFIG_AVAILABLE:
|
||||
command = "aticonfig --odgt"
|
||||
|
||||
return_value = check_output(command, shell=True)
|
||||
if command is None:
|
||||
exit(1)
|
||||
|
||||
# Default return value
|
||||
if sensors_available:
|
||||
m = re.search(r'\+(.*)°C ',return_value.decode("utf-8"))
|
||||
print(m.group(1))
|
||||
logging.info(m.group(1))
|
||||
elif aticonfig_available:
|
||||
m = re.search(r'- (.*) C',return_value.decode("utf-8"))
|
||||
print(m.group(1))
|
||||
logging.info(m.group(1))
|
||||
else:
|
||||
print("?")
|
||||
logging.info('?')
|
||||
# Run command
|
||||
return_value = check_output(command, shell=True)
|
||||
|
||||
temp = '?'
|
||||
|
||||
# Default return value
|
||||
if SENSORS_AVAILABLE:
|
||||
m = re.search(r'\+(.*)°C ', return_value.decode("utf-8"))
|
||||
temp = m.group(1)
|
||||
elif ATICONFIG_AVAILABLE:
|
||||
m = re.search(r'- (.*) C', return_value.decode("utf-8"))
|
||||
temp = m.group(1)
|
||||
else:
|
||||
logging.info('wat')
|
||||
logging.info(temp)
|
||||
return temp
|
||||
|
||||
print(get_temperature())
|
||||
|
|
6
ranger.sh
Executable file
6
ranger.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
URI=$1
|
||||
REALPATH=$(echo "$URI" | sed 's/file\:\/\///g')
|
||||
export TERMCMD=kitty
|
||||
notify-send "Opening '$REALPATH'"
|
||||
kitty -1 ranger '$REALPATH'
|
57
screenshot.py
Normal file
57
screenshot.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
"""
|
||||
screenshot.py to create screenshots using external tools. Designed for multiple displays.
|
||||
-h help
|
||||
-r [--rate] the rate in which frames are extracted (default: 10 fps)
|
||||
"""
|
||||
|
||||
import getopt
|
||||
import sys
|
||||
import subprocess
|
||||
from subprocess import call
|
||||
import lib.helpers as helpers
|
||||
from Xlib import X, display
|
||||
from Xlib.ext import randr
|
||||
|
||||
__author__ = 'lanxu <jukka.lankinen@gmail.com>'
|
||||
|
||||
def main(argv):
|
||||
scrot_available = helpers.is_exe("/usr/bin/scrot")
|
||||
maim_available = helpers.is_exe("/usr/bin/maim")
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(argv,"h", [])
|
||||
except getopt.GetoptError:
|
||||
print('screenshot.py')
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
#command = ['scrot',]
|
||||
#ps = subprocess.Popen(command_ffmpeg, stdout=subprocess.PIPE)
|
||||
#val = call(command_convert, stdin=ps.stdout)
|
||||
d = display.Display()
|
||||
print(d.get_display_name())
|
||||
for n in range(d.screen_count()):
|
||||
s = d.screen(n)
|
||||
print(str(n))
|
||||
w = s.root.create_window(0, 0, 1, 1, 1, s.root_depth)
|
||||
res = randr.get_screen_resources(w)
|
||||
|
||||
|
||||
for m in res.modes:
|
||||
print(m.id)
|
||||
print(str(m.width) + 'x' + str(m.height))
|
||||
|
||||
for o in res.outputs:
|
||||
output = screen.get_output_by_id(o)
|
||||
print(output)
|
||||
#print(res.outputs)
|
||||
#print(res.crtcs)
|
||||
#print(res)
|
||||
|
||||
except:
|
||||
print("lol")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
|
@ -1,12 +1,56 @@
|
|||
#!/bin/sh
|
||||
xsetwacom --set "HID 256c:006e Pen stylus" Area 0 0 50800 28575
|
||||
#xsetwacom --set "HID 256c:006e Pad pad" Button 15 "key +altgr 8"
|
||||
#xsetwacom --set "HID 256c:006e Pad pad" Button 16 "key +altgr 9"
|
||||
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 2 "key e"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 3 "key p"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 8 "button 5"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 9 "button 4"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 10 "key ]"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 11 "key ["
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 12 "key m"
|
||||
# xsetwacom --set "HID 256c:006e Pen stylus" Area 0 0 50800 28575
|
||||
xsetwacom --set "HID 256c:006e Pen stylus" MapToOutput DVI-D-0
|
||||
|
||||
# Tester
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 1 "key a"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 2 "key b"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 3 "key c"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 4 "key d"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 5 "key e"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 6 "key f"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 7 "key g"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 8 "key h"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 9 "key i"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 10 "key j"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 11 "key k"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 12 "key l"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 13 "key m"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 14 "key n"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 15 "key o"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 16 "key p"
|
||||
|
||||
# Huion 1060 New buttons from top to bottom:
|
||||
# 1 2
|
||||
# 3 8
|
||||
# 9 10
|
||||
# ----
|
||||
# 11 12
|
||||
# 13 14
|
||||
# 15 16
|
||||
|
||||
## 1
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 1 "key +ctrl +z -z -ctrl"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 2 "key +ctrl +shift +z -z -ctrl -shift"
|
||||
|
||||
## 2
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 3 "key L"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 8 "key K"
|
||||
|
||||
## 3
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 9 "key -"
|
||||
xsetwacom --set 'HID 256c:006e Pad pad' Button 10 "key +"
|
||||
|
||||
#
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 13 "key p"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 12 "key ["
|
||||
|
||||
## 2
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 11 "key ]"
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 10 "key +"
|
||||
|
||||
## 5
|
||||
#xsetwacom --set 'HID 256c:006e Pad pad' Button 3 "key b"
|
||||
|
||||
## 6
|
||||
|
|
17
startwayland
Executable file
17
startwayland
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/sh
|
||||
|
||||
export XKB_DEFAULT_LAYOUT=fi
|
||||
#export XKB_DEFAULT_VARIANT=fi
|
||||
export XKB_DEFAULT_MODEL=pc105
|
||||
|
||||
#export XDG_RUNTIME_DIR=/tmp/wayland
|
||||
#export WAYLAND_DISPLAY=wayland-0
|
||||
|
||||
# force all generic backend to use wayland backend
|
||||
export GDK_BACKEND=wayland
|
||||
export QT_QPA_PLATFORM=wayland-egl
|
||||
export CLUTTER_BACKEND=wayland
|
||||
export SDL_VIDEODRIVER=wayland
|
||||
export EWOL_BACKEND=wayland
|
||||
|
||||
sway
|
|
@ -3,14 +3,25 @@
|
|||
# Toggle between HDMI and Analog
|
||||
# Find out current RUNNING sink
|
||||
currentSink=$(pactl list short sinks | grep 'RUNNING' | awk '{print$2}')
|
||||
#currentSink=$(pactl info | grep "Default Sink:" | awk '{print$3}')
|
||||
sink=NULL
|
||||
sink=NULL # Selected sink
|
||||
|
||||
# Then find the first hdmi or analog sink
|
||||
if [[ $currentSink == *"hdmi"* ]]; then
|
||||
sink=$(pactl list short sinks | awk '{print$2}' | grep 'analog' | sed -n '1p')
|
||||
else
|
||||
# Prefer the sink name from command-line
|
||||
preferSink=$1
|
||||
|
||||
# Toggle between sinks
|
||||
if [[ $currentSink != *"hdmi"* ]]; then
|
||||
sink=$(pactl list short sinks | awk '{print$2}' | grep 'hdmi' | sed -n '1p')
|
||||
else
|
||||
availableSinks=$(pactl list short sinks | awk '{print$2}' | grep 'analog')
|
||||
for sink in $availableSinks
|
||||
do
|
||||
# If preferred sink name is given the first one maching will be selected
|
||||
# Empty preferred sink argument will select the first one because
|
||||
# empty matches everything
|
||||
if [[ $sink == *$preferSink* ]]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Exit if there is no sink :(
|
||||
|
@ -27,4 +38,3 @@ pactl list short sink-inputs|while read stream; do
|
|||
echo "moving stream $streamId"
|
||||
pactl move-sink-input "$streamId" "$sink"
|
||||
done
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user