- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近接触了 XMonad,不幸的是我对 Haskell 不太了解。我正在尝试配置我的 xmonad.hs 文件,以便我可以控制音量。然而,现在,即使我的 xmonad.hs 文件编译没有错误,我也无法控制音量。
我从这个链接获得了音量控制代码:http://dmwit.com/volume/
这是我的配置文件:
import XMonad
import XMonad.Util.Run(spawnPipe)
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Actions.Volume
import XMonad.Util.Dzen
import Data.Map (fromList)
import Data.Monoid (mappend)
import System.IO
alert = dzenConfig centered . show . round
centered =
onCurr (center 150 66)
>=> font "-*-helvetica-*-r-*-*-64-*-*-*-*-*-*-*"
>=> addArgs ["-fg", "#80c0ff"]
>=> addArgs ["-bg", "#000040"]
main = do
xmproc <- spawnPipe "xmobar /home/david/.xmobarrc"
xmonad $ defaultConfig
{
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask
, keys =
keys defaultConfig `mappend`
\c -> fromList [
((0, xK_F6), lowerVolume 4 >>= alert),
((0, xK_F7), raiseVolume 4 >>= alert)
]
}
我已将代码更改为以下内容,但音量没有改变:
main = do
xmproc <- spawnPipe "xmobar /home/luren/.xmobarrc"
xmonad $ defaultConfig
{
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask
, keys =
keys defaultConfig `mappend`
\c -> fromList [
((0, 0x1008FF11), spawn "amixer -D pulse sset Master 4-"),
((0, 0x1008FF13), spawn "amixer -D pulse sset Master 4+")
]
}
(完)
这些键是我笔记本电脑上音量媒体键的代码。
我四处窥探并看到了一些其他配置。我决定做一个小测试,让音频降低音量键打印 Hi ppl!当按下时。不幸的是,这不起作用。
main = do
xmproc <- spawnPipe "xmobar /home/luren/.xmobarrc"
xmonad $ defaultConfig
{
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask
}
`additionalKeys`
[
((0, xF86XK_AudioLowerVolume), spawn "echo 'Hi ppl!'"),
((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 15%+")
]
最佳答案
这是我编写的用于控制脉冲音频音量的脚本。将其转储到名为pulse_control.pl 的文件中,并确保它是可执行的并且位于您的PATH
中。它使用 pacmd
和 pactl
,您可能必须使用发行版的包管理器来安装它们。
#!/usr/bin/perl
use List::Util qw[min max];
use Getopt::Long;
my $_IS_MUTED;
my $_TOGGLE_MUTE;
my $_VOL;
my $_INC_VOL;
my $_DEC_VOL;
GetOptions(
"is-muted" => \$_IS_MUTED
, "toggle-mute" => \$_TOGGLE_MUTE
, "volume" => \$_VOL
, "inc-vol" => \$_INC_VOL
, "dec-vol" => \$_DEC_VOL
);
my $sink = `pactl info | sed -rn 's/^Default Sink: (.+)\$/\\1/gp'`;
chomp $sink;
sub ismuted {
my $ismuted = `pacmd dump | grep "$sink" | grep sink-mute | grep yes`;
chomp $ismuted;
if ($ismuted ne "") {
return 1;
} else {
0;
}
}
sub curvol {
my $volline = `pacmd dump | grep "$sink" | grep sink-vol`;
if ($volline =~ m/(0x[0-9a-f]+)/ ) {
return hex $1;
} else {
return 0;
}
}
if ($_IS_MUTED) {
print ismuted(), "\n";
}
elsif($_TOGGLE_MUTE) {
if (ismuted()) {
`pactl set-sink-mute $sink 0`;
} else {
`pactl set-sink-mute $sink 1`;
}
}
elsif($_VOL) {
print int(curvol() * 100.0 / hex("0x10000")), "%\n";
}
elsif($_INC_VOL) {
my $newvol = min(hex("0x10000"), curvol() + int((hex("0x10000") * .04)));
`pactl set-sink-volume $sink $newvol`;
}
elsif($_DEC_VOL) {
my $newvol = max(0, curvol() - int((hex("0x10000") * .04)));
`pactl set-sink-volume $sink $newvol`;
}
然后在我的 xmonad 配置中,我将音量控制绑定(bind)到 ctrl+alt+(向上翻页/向下翻页/结束)。
`additionalKeys`
[
((controlMask .|. mod1Mask, xK_Page_Up), spawn "pulse_control.pl -inc")
, ((controlMask .|. mod1Mask, xK_Page_Down), spawn "pulse_control.pl -dec")
, ((controlMask .|. mod1Mask, xK_End), spawn "pulse_control.pl -toggle")
]
关于haskell - XMonad 卷配置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29336746/
如何获取 xmonad 中可见工作空间(当前显示在显示器上的工作空间)的列表?目前,在我的 xmonad.hs 配置文件中,命令 (XMonad.workspaces conf) 为我提供了所有工作区
默认情况下,xmonad 处理 every display separately 。我可以切换到每个显示器并在其上放置一个工作区。这非常有效并且很有意义。 现在我遇到的问题是,通过 DisplayPo
每当 xmonad 启动、重新启动或重新编译时,我都会收到一条 xmessage: xmonad.hs:1:8: Could not find module `XMonad' Perhaps you
我知道 XMobar 支持位图图标,并且我能够配置它们。不过,我还想使用图标来指示当前的 XMonad 布局,但 XMobar 从 XMonad 的 stdin 上获取它。而且我无法找到一种方法来传递
我试图从 ~/.xmonad/Tree.hs 导入一个名为“Tree.hs”的自定义本地模块,但我得到: Error detected while loading xmonad configurati
嗨,直到几天前,我的 Xmonad 一直运行良好,然后我想我用 Synaptic 安装了一些东西,然后开始提示 Xmonad.Config.Gnome这是我的 xmonad.hs import XMo
编辑:原来我的问题只是 Xmobar 中的一个临时错误。请参阅已接受的答案。 谷歌上有很多解决方案,但几乎没有一个对我有用。我正在建立一个 Arch 系统,所以我的第一个倾向是使用 the confi
当我在 ubuntu 中使用 xmonad 时,我遵循了 Xmonad 的教程,但是没有应用程序菜单栏。 我怎么解决这个问题? 我的配置文件在这里: import XMonad import XMon
我正在尝试在 ubuntu 上使用 nix,并使用 XMonad 作为我的窗口管理器。我在一台使用 nixOS 的主机上运行良好,但我有第二台设备尚未准备好支持 nixOS。 Ubuntu 之上的 n
我正在尝试在haskell中设置一个用于代码开发的NixOS VM,并且在xmonad和emacs的基本安装方面遇到了麻烦。我的相关部分/etc/nixos/configuration.nix是 en
This answer描述了如何在 Xmonad 中创建组合键绑定(bind)。 使用 additionalKeys 我将我的键绑定(bind)作为列表添加到我的 XConfig 配置中: ... -
在使用 Alt-Tab 键切换事件窗口时,XMonad 是否可以像许多窗口管理器一样工作?经过一番寻找,我尝试过: ((mod1Mask, xK_Tab), cycleRecentWindows [x
正如标题所说,我需要在两个或更多屏幕上显示一个窗口。 我尝试了 XMonad.Actions.CopyWindow。但似乎虽然窗口被复制到正确的工作区,但它只显示在一个物理屏幕上。 最佳答案 据我了解
我对 xmonad 完全陌生,但我想开始使用它来提高我的工作效率。 这是我一直在使用的指南(我使用的是 Apple OS X Snow Leopard) http://xmonad.org/tour.
我正在尝试编写一个 xmonad.hs,它在启动时会在某些工作区上启动一些应用程序。其中几个应用程序(例如, atop )将在终端内运行( urxvt 是我的偏好)。 这已经被问过几次了,例如,her
我想在 xmonad 启动时在不同的工作区(这很重要)中启动一些应用程序。所以,我写了以下 startupHook : startupApps :: [String] startupApps = ["
我看到其他几个人也有同样的问题,但是没有一个解决方案对我有用。下面的命令+输出主要是我试过的。我发帖 1) 因为我一直坚持这个问题 2) 我想在另一篇文章中发表评论,但我没有声誉 :( 我已经重新安装
我想扩展我的 xmonad.hs,方法是通过 stack 将它移动到它自己的沙盒项目环境中。事实证明,通过将您的 xmonad main 函数嵌入到使用 xmonad-entryhelper 的父级
我正在尝试配置我的 xmonad.hs所以当我开始我的 session 时,我会在不同的工作区启动一系列不同的程序(比如 1 中的终端;2 中的 Firefox;3 中的 Pidgin)。 我已经查看
是否可以根据我显示的物理屏幕以某种方式更改工作区布局? 我想在左显示器的布局上使用 reflectHoriz(来自 XMonad.Layout.PerWorkspace),以便主 Pane 始终最靠近
我是一名优秀的程序员,十分优秀!