无忧启动论坛

标题: 快捷键更换背景颜色 [打印本页]

作者: 游鱼摆尾    时间: 2023-9-17 17:47
标题: 快捷键更换背景颜色
无意间看了hhh333的一个切换主题的脚本,依葫芦画瓢,想写一个更换背景颜色的脚本如下:

        #定义现有背景颜色
        set t1="#003345" #天蓝色
        set t2="#3F6B6B" #浅蓝色
        set t3="#365E27" #绿色
        set t4="#806C00" #暗黄色
        set t5="#810505" #红色
            #设置背景颜色
            background_color $t1
            hiddenentry "Switch background_color" --hotkey f5 {
            if [ "$background_color" == "$t1" ]; then
                    set background_color=$t2
            elif [ "$background_color" == "$t2" ]; then
                    set background_color=$t3
            elif [ "$background_color" == "$t3" ]; then
                    set background_color=$t4
            elif [ "$background_color" == "$t4" ]; then
                    set background_color=$t5
            else
                    set background_color=$t1
            fi
            }


但是没有作用是怎么回事呢

作者: 车厘子    时间: 2023-9-17 18:33
沙发
作者: 2011whp    时间: 2023-9-17 21:06
全部 用命令
background_color $t2
作者: yc2428    时间: 2023-9-17 23:10
谢谢分享。
作者: 蓉城1998    时间: 2023-9-18 10:52
感谢分享。
作者: martin313    时间: 2023-9-18 14:28
支持研究开发
作者: nathan6498    时间: 2023-9-18 15:48
谢谢分享
作者: 游鱼摆尾    时间: 2023-9-18 17:23
2011whp 发表于 2023-9-17 21:06
全部 用命令
background_color $t2

我改成这样有效果,但是只能按一次就失效了
            hiddenentry "Switch background_color" --hotkey f5 {
            if [ "$background_color $t1" ]; then
                    background_color $t2
            elif [ "$background_color $t2" ]; then
                    background_color $t3
            elif [ "$background_color $t3" ]; then
                    background_color $t4
            elif [ "$background_color $t4" ]; then
                    background_color $t5
            elif [ "$background_color $t2" ]; then
                    background_color $t6
            elif [ "$background_color $t3" ]; then
                    background_color $t7
            elif [ "$background_color $t4" ]; then
                    background_color $t8
            else
                    background_color $t1
            fi
            }

只能切换一次,我想按一次f5就切换一次,按一次就切换一次。

于是我想到了bush脚本中的for循环,但是一窍不通,不会。哎

作者: 游鱼摆尾    时间: 2023-9-21 14:17
gues1688 发表于 2023-9-21 12:25
参考如下,用了正常菜单,没用隐藏菜单,原理一样,错误原因是,执行background_color "$t1"命令,并不会 ...

大佬牛逼,没有想到环境变量这点,所以判断也失去了意义!其实我还想利用bash脚本的for循环来写更简洁,但是奈何小白一个,不会。。。比如
for num in {1..10}  
do  
background_color $tnum  
done  

我想参照这个最终的更换主题脚本(来自hhh333)
#主题切换-F5切换-F6清除
#主题计数
export theme_count=0
for item in $prefix/themes/*/theme.txt; do
        expr --set=theme_count $theme_count+1
done

if [ $theme_count -gt 0 ]; then
        set theme_index=1

        #换主题
        hiddenentry "Switch Themes" --hotkey f5 {
                set i=0
                expr --set=theme_index $theme_index+1
                if [ $theme_index -gt $theme_count ]; then
                        set theme_index=1
                fi
                for item in $prefix/themes/*/theme.txt; do
                        expr --set=i $i+1
                        if [ $i -eq $theme_index ]; then
                                set theme=$item
                                break
                        fi
                done
        }

        #无主题
        hiddenentry "Clear Themes" --hotkey f6 {
                if [ "$theme" != "" ]; then
                        unset theme
                fi
        }
fi
思路有,但是一点也不会


作者: LRM-COM    时间: 2023-9-23 15:49
谢谢分享
作者: zwf2002    时间: 2023-9-24 10:00
目前还是chromium这类
作者: 游鱼摆尾    时间: 2023-9-27 15:44
gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

谢谢大佬,请收下我的膝盖。代码确实看的云里雾里,第一段代码$i1,$i2,$item绕来绕去看不懂。还有unset是清除变量吗,为什么要清除这两个变量呢?break是终止循环吗,是什么情况下终止循环?第二段那就更是看天书了
作者: 游鱼摆尾    时间: 2023-9-27 15:50
本帖最后由 游鱼摆尾 于 2023-9-27 16:03 编辑
gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

还有我找葫芦画瓢弄了一个循环切换背景图片的代码,可行,但好像会切换为纯黑背景,有的图片还会连续重复切换一次,不知道哪里有问题。大佬帮忙看看:

  background_image /EFI/grub2/backgrounds/bg.jpg
  #背景图片计数
  export bg_count=0
  for item in $prefix/backgrounds/*.*; do
          expr --set=bg_count $bg_count+1
  done
  
  if [ $bg_count -gt 0 ]; then
          set bg_index=1
  
          #换背景
          hiddenentry "【按 f5 键,切换背景图片】" --hotkey f5 {
                  set i=0
                  expr --set=bg_index $bg_index+1
                  if [ $bg_index -gt $bg_count ]; then
                          set bg_index=1
                  fi
                  for item in $prefix/backgrounds/*.*; do
                          expr --set=i $i+1
                          if [ $i -eq $bg_index ]; then
                                                   background_image $item
                                  set bg=$item
                                  break
                          fi
                  done
          }
  fi
作者: 游鱼摆尾    时间: 2023-9-27 16:04
游鱼摆尾 发表于 2023-9-27 15:50
还有我找葫芦画瓢弄了一个循环切换背景图片的代码,可行,但好像会切换为纯黑背景,有的图片还会连续重复 ...

哈哈,我找到原因了,有重复的图片和不支持的图片所导致的结果
作者: 游鱼摆尾    时间: 2023-9-27 16:05
gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

哈哈,我找到原因了,有重复的图片和不支持的图片所导致的结果
作者: 游鱼摆尾    时间: 2023-9-27 16:12
gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

当文件不支持时,就会显示为纯黑背景。但是很奇怪同样是jpg文件,并且分辨率也一样是1024*768,另外一张支持,而有一张却不支持。
作者: 游鱼摆尾    时间: 2023-9-27 16:58
本帖最后由 游鱼摆尾 于 2023-9-27 17:00 编辑
gues1688 发表于 2023-9-23 15:38
用循环的代码可读性稍差,给你两段代码参考:

烦死了删除重复图片,还是有一张连续重复1次,看来是代码的问题

另外,我想加上无背景的代码,但是没用
        #无背景
        hiddenentry "【按 f6 键,切换背景图片】" --hotkey f6 {
                if [ "$theme" != "" ]; then
                        unset background_image或unset bg都没用
                fi
        }
fi
作者: 游鱼摆尾    时间: 2023-9-29 15:36
gues1688 发表于 2023-9-28 21:01
background_image是命令,又不是环境变量,怎么可以 unset background_image ?
想清除背景图,只能找一 ...

嗯嗯,谢谢啦,您的代码可以,我清除图片直接用的代码background_color="#000000",反正清除图片的本质就是会变为默认纯黑背景。另外如果backgrounds文件夹里有其它文件,比如bat文件,txt文件。有什么办法排除吗,否则切换时遇到不支持的文件会变为纯黑背景。
作者: 2011dsfive    时间: 2023-9-29 21:04
不错谢谢分享
作者: 游鱼摆尾    时间: 2023-9-30 16:31
gues1688 发表于 2023-9-29 21:00
嗯,清除背景,用黑色或其它纯色背景都可以。
假设,图片的扩展名是.png,代码参考如下:
注意,第5、6 ...

哈哈,我的意思是图片有多种格式,只想排除bat或者txt后缀的文件
作者: 游鱼摆尾    时间: 2023-9-30 16:33
gues1688 发表于 2023-9-29 21:00
嗯,清除背景,用黑色或其它纯色背景都可以。
假设,图片的扩展名是.png,代码参考如下:
注意,第5、6 ...

并不是用指定格式图片文件,代码的话在grub2里能做到吗
作者: ec2001    时间: 2023-9-30 20:51
谢谢分享
作者: 游鱼摆尾    时间: 2023-10-1 16:28
gues1688 发表于 2023-9-30 20:00
可以,用正则表达式,提取、筛选扩展名
20楼是一个应用实例
更多的可以百度,或者参考此贴:

纯小白不会,只会挑现成的依葫芦画瓢
作者: 游鱼摆尾    时间: 2023-10-3 12:02
gues1688 发表于 2023-10-2 11:29
参考如下:

论坛有问题!贴出的代码会被吃掉!再贴一次试试:

如果是多种格式可以这样写吗
if regexp '^(jpg)|(png)|(bmp)$' "$name_ext"; then
作者: rbwrbw    时间: 2023-10-6 17:28
配置要求很严格,错一个符号都不行!!有时还要区分大小写
作者: 游鱼摆尾    时间: 2023-10-6 17:34
gues1688 发表于 2023-10-3 21:15
嗯,可以。 代码中,| 表示 “或”的意思
其实不用正则表达式也可以。
23楼 http://bbs.wuyou.net/foru ...

谢谢大佬,我看了一下您之前分享给我的链接里面的正则表达式用法,如果要区分大小写还可以这样写吗,也就是说不用将拓展名转换成大写或者小写,直接写成这样:
if regexp '^[jJ][pP][gG]|[pP][nN][gG]|[bB][mM][pP]$' "$name_ext"; then
作者: say_dude    时间: 2023-10-17 15:46
多学多练,不断进步,方能立于不败之地
作者: 无犹启动    时间: 2023-10-27 16:28
谢谢分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3