ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Ubuntu 20.04.6 用wine 10安装Notepad++,第1文件缩小,第二文件双击打开,弹窗置顶不了

Ubuntu 20.04.6 用wine 10安装Notepad++,第1文件缩小,第二文件双击打开,弹窗置顶不了 cd Notepad目录 wine npp.8.9.7.Installer.x64.exe 根据界面选择进行安装 # 解决notepad第1个文件打开后然后缩小之后再打开第2个文件不弹出置顶的问题 sudo apt install wmctrl xdotool mkdir -p ~/.local/bin cd ~/.local/bin # 创建wine-notepadpp-open这个文件 touch wine-notepadpp-open # 文件内容如下 #!/bin/bash # wine-notepadpp-open (融合版路由 路径转换 日志 强制置顶激活) # 用法: wine-notepadpp-open 文件路径 set -uo pipefail # 注意不用 -e因为下面用了 后台启动 轮询中途非0返回是正常情况 export WINEPREFIX$HOME/.wine LOG$HOME/wine-notepadpp-open.log NOTEPADPP_EXE$WINEPREFIX/drive_c/Program Files/Notepad/notepad.exe # ---- Windows路径(C:\...) - Unix路径Xftp传来的参数可能是Windows形式 ---- ARGS() for arg in $; do if [[ $arg ~ ^[A-Za-z]:\\ ]]; then ARGS($(winepath -u $arg)) else ARGS($arg) fi done { echo ---- $(date) ---- printf args: printf [%s] $ echo printf converted: printf [%s] ${ARGS[]} echo } $LOG FILE${ARGS[0]:-} if [ -z $FILE ]; then echo 未收到文件参数 $LOG exit 1 fi EXT${FILE##*.} EXT${EXT,,} # 转小写 # ---- 通用窗口激活函数按标题/类名正则匹配取面积最大的窗口多次重试激活 ---- # 用法: activate_window 用于wmctrl -lx匹配的正则忽略大小写 activate_window() { local pattern$1 local max_wait50 # 最多等 5 秒 local win_id find_main_window() { local best_id local best_area0 local wid class w h geo area while read -r wid _ class _; do [ -z $wid ] continue geo$(xdotool getwindowgeometry --shell $wid 2/dev/null || true) [ -z $geo ] continue w$(echo $geo | grep ^WIDTH | cut -d -f2) h$(echo $geo | grep ^HEIGHT | cut -d -f2) [ -z $w ] || [ -z $h ] continue area$((w * h)) if [ $area -gt $best_area ]; then best_area$area best_id$wid fi done (wmctrl -lx | awk -v pat$pattern tolower($0) ~ pat) echo $best_id } for ((i0; imax_wait; i)); do win_id$(find_main_window) [ -n $win_id ] break sleep 0.1 done if [ -z $win_id ]; then echo 未找到匹配窗口: $pattern $LOG return 1 fi wmctrl -ir $win_id -b remove,hidden 2/dev/null || true xdotool windowmap $win_id 2/dev/null || true xdotool windowstate --sync --remove HIDDEN $win_id 2/dev/null || true xdotool windowstate --sync --remove SHADED $win_id 2/dev/null || true for i in 1 2 3; do xdotool windowactivate --sync $win_id 2/dev/null || true wmctrl -ia $win_id 2/dev/null || true sleep 0.15 done xdotool windowraise $win_id 2/dev/null || true echo 已激活窗口: $win_id ($pattern) $LOG return 0 } # ---- 按扩展名路由到对应程序 ---- case $EXT in doc|docx|dot|dotx|wps|wpt) echo route - wps : $FILE $LOG wps ${ARGS[]} $LOG 21 activate_window wps ;; xls|xlsx|xlt|xltx|et|ett|csv) echo route - et : $FILE $LOG et ${ARGS[]} $LOG 21 activate_window et\b|spreadsheet ;; ppt|pptx|pot|potx|dps|dpt) echo route - wpp : $FILE $LOG wpp ${ARGS[]} $LOG 21 activate_window wpp|presentation ;; *) echo route - notepad : $FILE $LOG wine $NOTEPADPP_EXE ${ARGS[]} $LOG 21 activate_window notepad\\ ;; esac # 转一次换行符防止 nano 又引入 CRLF sed -i s/\r$// ~/.local/bin/wine-notepadpp-open chmod x ~/.local/bin/wine-notepadpp-open echo export PATH$HOME/.local/bin:$PATH ~/.bashrc source ~/.bashrc echo $PATH | grep -q $HOME/.local/bin echo 已在PATH中 || echo 需要添加 sudo apt install vim cd /etc sudo vim ./environment 在PATH的路径中最前面加一个 /home/user/.local/bin: linux系统变量是用冒号分隔的windows是分号分隔的 PATH/home/user/.local/bin:原有的不变的路径 # 例如 PATH/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin... reboot echo $PATH | grep -q $HOME/.local/bin echo 已在PATH中 || echo 需要添加 bash -x ~/.local/bin/wine-notepadpp-open /home/user/.bashrc 21 | tee /tmp/npp_debug.log 系统需要一个 .desktop 文件才能在 “打开方式” 列表中识别它 cd ~/.local/share/applications touch Notepad.desktop 把如下内容复制到这个文件中 注意如下内容不能有井号注释 [Desktop Entry] NameNotepad Exec/home/user/.local/bin/wine-notepadpp-open %f TypeApplication StartupNotifytrue Path/home/user/.wine/dosdevices/c:/Program Files/Notepad Icon7ABC_notepad.0 StartupWMClassnotepad.exe grep -l -ri Notepad ~/.local/share/applications/*.desktop 2/dev/null # 得到以下几个文件就是打开方式中的多个Notepad其实可以删除这几个多余的.desktop文件我这里没有删除如果没有就跳过这些文件 ~/.local/share/applications/wine-extension-inf.desktop ~/.local/share/applications/wine-extension-ini.desktop ~/.local/share/applications/wine-extension-log.desktop ~/.local/share/applications/wine-extension-txt.desktop . . . # 如果还有别的都算 # 把wine-extension-inf.desktop、wine-extension-ini.desktop、wine-extension-log.desktop、wine-extension-txt.desktop、...中的Exec...这行改成如下不能有注释其他行不动 Exec/home/user/.local/bin/wine-notepadpp-open %f # 将Notepad.desktop赋权限 chmod x ~/.local/share/applications/Notepad.desktop chmod x ~/.local/share/applications/wine-extension-inf.desktop chmod x ~/.local/share/applications/wine-extension-ini.desktop chmod x ~/.local/share/applications/wine-extension-log.desktop chmod x ~/.local/share/applications/wine-extension-txt.desktop . . . # 更新系统应用数据库 update-desktop-database ~/.local/share/applications/ # 做下面的检查 cat ~/.config/mimeapps.list | grep -i text 如果上面的结果中有 text/plainNotepad.desktop 就说明对的否则执行下面的 xdg-mime default Notepad.desktop text/plain # 强制把 text/plain 关联改成您的程序 gtk-launch Notepad /home/user/.bashrc # .bashrc 只是一个文件例子换一个别的路径的文件都行 xdg-mime query default text/plain # 之后随便找一个文本文件右键-属性-打开方式-选择Notepad就可以将文本文件默认使用Notepad打开
返回列表