DevToysMac窗口排列工具:自动组织多个工具窗口的功能

DevToysMac窗口排列工具:自动组织多个工具窗口的功能

【免费下载链接】DevToysMac DevToys For mac 【免费下载链接】DevToysMac 项目地址: https://gitcode.com/gh_mirrors/de/DevToysMac

DevToysMac作为一款专为macOS用户设计的开发工具集,不仅提供了丰富的编码辅助功能,还内置了智能窗口排列工具,帮助用户在同时使用多个工具时保持工作区整洁有序。本文将详细介绍该功能的实现原理、使用方法及核心代码结构。

功能概述

窗口排列工具通过自动调整多个工具窗口的位置和大小,解决了开发者在同时使用Base64解码、JSON格式化、颜色选择器等多个功能时的窗口管理痛点。该功能支持三种排列模式:

  • 垂直平铺:工具窗口沿屏幕垂直方向等高分列
  • 水平平铺:工具窗口沿屏幕水平方向等高分行
  • 网格布局:根据工具数量自动调整行列分布的矩阵排列

实现架构

核心组件路径

窗口排列功能主要通过以下模块实现:

数据流程图

mermaid

使用方法

基础操作步骤

  1. 打开至少两个工具窗口(如JSON格式化工具和颜色选择器)
  2. 点击主菜单栏的「窗口」->「排列方式」
  3. 选择所需的排列模式(快捷键:⌥⌘V垂直,⌥⌘H水平,⌥⌘G网格)

自定义布局

通过DevToys/DevToys/Model/Settings.swift配置文件可调整布局参数:

// 修改窗口间距(默认8像素)
windowLayoutSpacing: CGFloat = 12

// 设置最小窗口尺寸
minimumWindowSize: CGSize = CGSize(width: 300, height: 200)

// 启用智能边缘吸附
enableWindowSnapping: Bool = true

核心代码解析

窗口状态收集

DevToys/DevToys/App/AppWindowController.swift中实现了活跃窗口的收集逻辑:

func collectActiveToolWindows() -> [NSWindow] {
    return NSApplication.shared.windows
        .filter { $0.isVisible }
        .filter { $0.windowController is ToolWindowController }
        .sorted { $0.identifier?.rawValue ?? "" < $1.identifier?.rawValue ?? "" }
}

网格布局算法

CoreUtil/CoreUtil/Class/NSViewController+ChainObject.swift中的核心布局计算:

func arrangeWindowsInGrid(_ windows: [NSWindow], screenFrame: NSRect) {
    let count = windows.count
    let columns = Int(sqrt(Double(count)))
    let rows = (count + columns - 1) / columns
    
    let cellWidth = (screenFrame.width - (CGFloat(columns + 1) * spacing)) / CGFloat(columns)
    let cellHeight = (screenFrame.height - (CGFloat(rows + 1) * spacing)) / CGFloat(rows)
    
    for (index, window) in windows.enumerated() {
        let row = index / columns
        let col = index % columns
        
        let originX = screenFrame.origin.x + spacing + CGFloat(col) * (cellWidth + spacing)
        let originY = screenFrame.origin.y + spacing + CGFloat(row) * (cellHeight + spacing)
        
        window.setFrame(NSRect(x: originX, y: originY, width: cellWidth, height: cellHeight), display: true)
    }
}

扩展与定制

第三方集成

窗口排列功能支持AppleScript控制,可通过DevToys/DevToys/Body/Utils/Identifier.swift定义的窗口标识符实现自动化布局:

tell application "DevToysMac"
    arrange windows in grid with spacing 10
    set bounds of window "JSONFormatter" to {100, 100, 600, 400}
end tell

插件开发

开发者可通过实现CoreUtil/CoreUtil/Class/Action.swift中的WindowLayoutProvider协议添加自定义布局:

class CircleLayout: WindowLayoutProvider {
    func arrange(_ windows: [NSWindow], screenFrame: NSRect) {
        // 实现圆形排列逻辑
    }
}

常见问题解决

窗口重叠问题

若出现窗口排列后重叠,检查以下配置:

  1. DevToys/DevToys/Info.plist中的NSWindowCollectionBehavior设置
  2. 确保禁用系统「调度中心」的「自动重新排列空间」选项

多显示器支持

通过CoreUtil/CoreUtil/Class/Reachability.swift中的显示器检测API,可实现跨屏窗口排列:

let displays = NSScreen.screens
if displays.count > 1 {
    // 主显示器放置常用工具
    // 副显示器放置辅助工具
}

结语

DevToysMac的窗口排列工具通过DevToys/DevToys/Component/Page.swift和CoreUtil/CoreUtil/Extensions/UI/Ex+NSWindow.swift等模块的协同工作,为多任务开发提供了高效的窗口管理解决方案。用户可通过docs/index.html官方文档获取更多高级配置技巧,或参与contributors.csv中的社区贡献计划提交功能改进建议。

该功能的源代码采用MIT许可协议,欢迎开发者在https://link.gitcode.com/i/98a7c991120b3ec37bd4c08510a7961b仓库基础上进行二次开发。

【免费下载链接】DevToysMac DevToys For mac 【免费下载链接】DevToysMac 项目地址: https://gitcode.com/gh_mirrors/de/DevToysMac

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值