Post

Small Tricks - Vol-2025.12

Small Tricks - Vol-2025.12

hyprland中全屏

可以使用fullscreen命令.

另外发现了hyprland的配置支持SHIFT组合键,丰富了常用按键的功能 .config/hypr/hyprland.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Win + Shift + K 全屏模式
bind = $mainMod SHIFT, K, fullscreen

# Win + Shift + J 水平/竖直切换 
bind = $mainMod SHIFT, J, togglesplit, # dwindle

# Win + h,j,k,l 窗口间移动
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d

# Win + Shift + L : resize模式,通过 h,j,k,l调整大小
# goto resize submap
bind = $mainMod SHIFT, L, submap, resize
submap = resize
# reset
binde = , L, resizeactive, 40 0
binde = , H, resizeactive, -40 0
binde = , K, resizeactive, 0 -40
binde = , J, resizeactive, 0 40
# go back to global submap
bind = , escape, submap, reset
submap = reset

python中使用$HOME路径

1
2
import os
os.path.expanduser('~/.llm_env')

stow管理dotfile

折腾hyprland的时候,有了管理dotfile的想法。显然,最大的问题是:如何将散落在天涯海角的配置文件用一个仓库统一管理?

很容易想到用symbol link解决,但是手动创建比较麻烦。发现一个GNU工具stow可以胜任。

比如要将.config/hypr/hyprland.conf管理,可以:

1
2
3
4
5
cd ~
mkdir dotfiles && cd dotfiles
mkdir hypr
mv ~/.config/hypr/hyprland.conf ./hypr/
stow hypr -t ~/.config/hypr

其中stow会把指定目录下(dotfiles/hypr/*)的一个符号连接创建到到\t指定的目录下,上面的过程会完成”移动 + 创建符号链接”的过程。

Makefile & gcc

$> 代表“第一个依赖”,这里是xxx.s; $@代表目标文件,也就是xxx.elf

1
2
3
4
5
6
7
8
BUILD_DIR = .
ARM_SOURCES = $(wildcard *.s)
TARGETS = $(addprefix $(BUILD_DIR)/,$(notdir $(ARM_SOURCES:.s=.bin)))
all: $(TARGETS)
%.elf: %.s
	riscv64-unknown-elf-gcc $< -march=rv32i -mabi=ilp32 -static -fno-pic -fno-builtin -nostdlib  -nostdinc -g -o $@ -Wl,-Ttext,0x0
%.bin: %.elf
	riscv64-unknown-elf-objcopy -j .text -O binary -S $< $@

gcc一些选项

1
gcc -S a.c -o a.S   // 产生汇编 (注意: -s 是stripped, -S是产生汇编!)

.s和.S文件

.s一般是纯汇编文件,而.S通常带预处理器(比如ifdef, include

vim中的终端“吞快捷键”解决方法

不论是一些nvim插件,还是terminal命令,产生的终端一旦按下i编辑,便会开始“吞掉”Alt-<之类的快捷键。 曾经我遇到这类问题的解决方法简单粗暴:用完终端后C-D将其退出,但这也太麻烦了!今天学到一个小技巧,在终端中,可以按下C-\ C-n退回普通模式,然后就能使用nvim快捷键了。

但是,仍然按下两个组合键…能不能更简洁?

了解到位于这种终端里其实属于t模式,可以增加快捷键映射:

1
vim.keymap.set("t", "<Esc>", [[<C-\><C-n>]], { noremap = true})

”~” != “$HOME”

在添加了新的显示屏后,我制作了kitty的启动脚本,用于在不同的显示屏中显示不同的字体大小,然而无意间发现下面两种写法是不同的:

1
2
(venv14) woc@myarch:~/dotfiles ‹main›$ kitty --config ~/.config/kitty/kitty_base.conf
(venv14) woc@myarch:~/dotfiles ‹main›$ kitty --config "~/.config/kitty/kitty_base.conf"

前者能够成功执行,而后者则无法读取配置文件。原来~在shell中会先展开成绝对路径!但是写成字符串后,就失去了这个功能。

PS: 我原本的配置文件是:

1
2
conf1="~/xxx"
kitty --config $conf1 ......

原因是:bash中的变量本质都是字符串,没有什么“magic”,因此~不会自动展开。只需换成:

1
2
conf1="$HOME/xxx"
kitty --config $conf1 ......

即可.

cargo test

测试的时候,如果想要看到代码中的输出:

1
cargo test xxx  -- --show-output

如果想要看到测试代码中的输出:

1
cargo test xxx -- --nocapturef

uv

激活的时候,如果直接运行

1
venv/bin/activate

无法成功。

查看其内容后发现有:

1
2
# This file must be used with "source bin/activate" *from bash*
# You cannot run it directly

使用source venv/bin/activate即可成功激活.

另外,对于uv安装的虚拟环境,安装包的时候需要使用uv pip install xxx而不是直接pip install xxx

haskell的版本

在使用stack打开了一个项目后,发现hls LSP无法正常工作,随后提示找不到对应的版本。

1
2
3
4
(venv14) woc@myarch:haskell/test $ haskell-language-server-wrapper --version
haskell-language-server version: 2.10.0.0 (GHC: 9.10.1) (PATH: /home/woc/.ghcup/hls/2.10.0.0/lib/haskell-language-server-2.10.0.0/bin/haskell-language-server-wrapper)
(venv14) woc@myarch:haskell/test $ stack ghc  -- --version
The Glorious Glasgow Haskell Compilation System, version 9.10.3

可以看到目前使用的lsp版本是2.10.0.0,只支持到ghc的9.10.1,所以需要安装对应版本的haskel-language-server

1
2
ghcup --url-source=https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-vanilla-0.0.9.yaml install hls 2.12.0.0
ghcup set hls 2.12.0.0

clangd增加头文件路径识别

在项目根目录下增加.clangd文件:

1
2
3
4
CompileFlags:
  Add:
    - -I/home/woc/repo/DynTraceEngine/DynamoRIO-Linux-11.3.0-1/include
    - -I/home/woc/repo/DynTraceEngine/DynamoRIO-Linux-11.3.0-1/ext/include

然后再用nvim打开就不会提示“xxx.h not found”了

This post is licensed under CC BY 4.0 by the author.