如何对 AwesomeWM 文本时钟小部件实施序数日?
How can I implement ordinal days to the AwesomeWM textclock widget?
我正在使用 AwesomeWM v4.0-170-g6c24848-dirty,针对 Lua 5.3.3 编译;我开始自定义我的小部件。
从技术上讲,其中之一是时钟 wibox.widget.textclock()
。我已经能够更改 format
以更改顺序,添加自定义消息,例如 'Today is Sunday, the 23 of July of 2017' 但是...不知道序数。
我这里的意思是如何将 'rd' 添加到 23rd,并使其根据当前日期更改为,例如 21st, 22nd 或 24[=第 40=]。
我尝试在格式前添加一个 ordinal
变量,然后是一个 if-else 语句以确定其值取决于日期。但是,这不起作用:我既不能 'use' 函数外的日期格式,也不能在 format
.
内实现变量
据我所知,字符串中的变量可以像下面的例子一样实现:
print("Hello " .. name .. ", the value of key " .. k .. " is " .. v .. "!")
但是,这在这里不起作用。我 运行 没有线索,你能帮我解释一下吗?
到目前为止,我已经编写了一个通用的 'th' 日期格式:
mytextclock = wibox.widget.textclock(" %a %dth %B, %H:%M ", 60)
...其输出为:dayoftheweek dayth month, HH, MM.
背景:
起初我考虑了两个选项来布置问题:
1. Select 整个输出字符串中的日期:在程序处理后,使用某种Bash echo
(考虑像dayoftheweek day month hh:mm
这样的输出) Lua 等价于...
2。从一开始就单独处理变量 day
:这意味着找到一种方法来获取变量而不使用整个字符串,一旦我们拥有它...
...稍后使用 if-else
结构对其进行处理,该结构会根据其值改变输出。
由于速度原因,我使用了第二种方式。我发现从一开始就获取变量更容易、更清晰,而不是将一些代码行用于从输出中提取。
所以我开始使用 %d
作为我工作的主要变量,它在 Lua 中用于表示日期中的一天。 (source)
这里主要是把%d
的内容转换成字符串:
day = "%d" -- This is supposed to be an integer now.
daynumber = tostring(day) -- Converts it to a string.
lastdigit = tostring(day, -1)
print(lastdigit) -- Output: d.
砰!失败。这行不通,我希望有人可以在评论中说出原因。如果我打印最新的字符 (-1),输出始终是 d,如果我尝试使用 -2,我将获得全天值。
我的主要理论基于事实输入:
a = "%d"
print(a)
在 Lua 解释器中($ lua
在你的 shell 中)只是 returns %d
,根本没有整数;但这只是一个假设。更重要的是,据我所知 %d
是在日期上下文中使用的,而不是独立作为变量的值。
可能的解决方案:
day = os.date("%d") -- First of all we grab the day from the system time.
-- As Lua displays the day with two digits, we are storing both of them in variables in order to process them separately later.
firstdigit = string.sub(day, 0, 1)
lastdigit = string.sub(day, -1)
-- We don't want Awesome to display '01st August' or '08th September'. We are going to suppress the '0'.
if firstdigit == "0" then
day = lastdigit
end
-- Now we want to display the day with its respective ordinal: 1st, 2nd, 3rd, 4th... we are going to process the last digit for this.
if lastdigit == "1" then
ordinal = "st"
elseif lastdigit == "2" then
ordinal = "nd"
elseif lastdigit == "3" then
ordinal = "rd"
else
ordinal = "th"
end
-- Finally, we display the final date.
mytextclock = wibox.widget.textclock(" %a " ..day..ordinal.. " %B %H:%M ", 60)
...所以我们得到以下输出:
我的 conky 文件中有以下内容:
${exec /home/..../scripts/date-ordinal.sh}
date-ordinal.sh
包括:
#!/bin/bash
the_Day=$(date +'%d')
case $the_Day in
1,21,31)
echo "st"
;;
2,22)
echo "nd"
;;
3,23)
echo "rd"
;;
*)
echo "th"
;;
esac
我正在使用 AwesomeWM v4.0-170-g6c24848-dirty,针对 Lua 5.3.3 编译;我开始自定义我的小部件。
从技术上讲,其中之一是时钟 wibox.widget.textclock()
。我已经能够更改 format
以更改顺序,添加自定义消息,例如 'Today is Sunday, the 23 of July of 2017' 但是...不知道序数。
我这里的意思是如何将 'rd' 添加到 23rd,并使其根据当前日期更改为,例如 21st, 22nd 或 24[=第 40=]。
我尝试在格式前添加一个 ordinal
变量,然后是一个 if-else 语句以确定其值取决于日期。但是,这不起作用:我既不能 'use' 函数外的日期格式,也不能在 format
.
据我所知,字符串中的变量可以像下面的例子一样实现:
print("Hello " .. name .. ", the value of key " .. k .. " is " .. v .. "!")
但是,这在这里不起作用。我 运行 没有线索,你能帮我解释一下吗?
到目前为止,我已经编写了一个通用的 'th' 日期格式:
mytextclock = wibox.widget.textclock(" %a %dth %B, %H:%M ", 60)
...其输出为:dayoftheweek dayth month, HH, MM.
背景:
起初我考虑了两个选项来布置问题:
1. Select 整个输出字符串中的日期:在程序处理后,使用某种Bash echo
(考虑像dayoftheweek day month hh:mm
这样的输出) Lua 等价于...
2。从一开始就单独处理变量 day
:这意味着找到一种方法来获取变量而不使用整个字符串,一旦我们拥有它...
...稍后使用 if-else
结构对其进行处理,该结构会根据其值改变输出。
由于速度原因,我使用了第二种方式。我发现从一开始就获取变量更容易、更清晰,而不是将一些代码行用于从输出中提取。
所以我开始使用 %d
作为我工作的主要变量,它在 Lua 中用于表示日期中的一天。 (source)
这里主要是把%d
的内容转换成字符串:
day = "%d" -- This is supposed to be an integer now.
daynumber = tostring(day) -- Converts it to a string.
lastdigit = tostring(day, -1)
print(lastdigit) -- Output: d.
砰!失败。这行不通,我希望有人可以在评论中说出原因。如果我打印最新的字符 (-1),输出始终是 d,如果我尝试使用 -2,我将获得全天值。
我的主要理论基于事实输入:
a = "%d"
print(a)
在 Lua 解释器中($ lua
在你的 shell 中)只是 returns %d
,根本没有整数;但这只是一个假设。更重要的是,据我所知 %d
是在日期上下文中使用的,而不是独立作为变量的值。
可能的解决方案:
day = os.date("%d") -- First of all we grab the day from the system time.
-- As Lua displays the day with two digits, we are storing both of them in variables in order to process them separately later.
firstdigit = string.sub(day, 0, 1)
lastdigit = string.sub(day, -1)
-- We don't want Awesome to display '01st August' or '08th September'. We are going to suppress the '0'.
if firstdigit == "0" then
day = lastdigit
end
-- Now we want to display the day with its respective ordinal: 1st, 2nd, 3rd, 4th... we are going to process the last digit for this.
if lastdigit == "1" then
ordinal = "st"
elseif lastdigit == "2" then
ordinal = "nd"
elseif lastdigit == "3" then
ordinal = "rd"
else
ordinal = "th"
end
-- Finally, we display the final date.
mytextclock = wibox.widget.textclock(" %a " ..day..ordinal.. " %B %H:%M ", 60)
...所以我们得到以下输出:
我的 conky 文件中有以下内容:
${exec /home/..../scripts/date-ordinal.sh}
date-ordinal.sh
包括:
#!/bin/bash
the_Day=$(date +'%d')
case $the_Day in
1,21,31)
echo "st"
;;
2,22)
echo "nd"
;;
3,23)
echo "rd"
;;
*)
echo "th"
;;
esac