Изменение курсора i-beam мыши в Xcode 4 - PullRequest
24 голосов
/ 18 июля 2011

При использовании темной цветовой схемы в Xcode 4 курсор i-beam (он же курсор выбора текста) практически не виден. Есть ли способ изменить цвет этого курсора, либо специально для XCode, либо, если это не так, для всей системы?

Было бы неплохо, если бы он автоматически сменил цвет на контрастный с фоном.

Ответы [ 5 ]

47 голосов
/ 20 августа 2012

Начиная с Xcode 8, Apple спрятала курсор i-beam где-то там, где его никто не нашел. Вместо этого многие решили использовать Mousecape для изменения i-beam во всех программах. Я предпочитаю этот метод, так как он исправляет i-beam в других программах, которые поддерживают темные темы, таких как редактор Komodo. Mousecape должен работать во всех версиях Xcode, и обновление Xcode не сломает курсор. В настоящее время я использую Mousecape в macOS 10.13.2, Xcode 9.1. Вот шаги:

  1. Скачать Mousecape с здесь
  2. Загрузите «мыс» с измененным курсором i-beam, таким как Ярко-белый или Серая тень
  3. Выполнить Mousecape.app
  4. Из строки меню Mousecape: File > Import Cape > "cape" file downloaded above
  5. Щелкните правой кнопкой мыши импортированный «мыс» и выберите Apply
  6. Проверьте, работает ли новый курсор в Xcode. Когда все выполнено, вы можете навести курсор на каждую перезагрузку, выполнив команду из строки меню Mousecape: Mousecape > Install Helper Tool
  7. Установка обновлений macOS (например, с 10.13.1 по 10.13.2) может потребовать повторения шагов 5 и 6.

Оригинальный ответ:

Xcode НЕ использует общесистемный курсор i-beam, поскольку все, о ком я говорил, говорили об этом, как если бы это был известный факт. Если бы я не поверил этим людям, я бы не потратил два дня, чтобы понять, как изменить системный курсор i-beam, редактируя CoreGraphics , только чтобы обнаружить, что ibeam Xcode не меняется. Кстати, я также наткнулся на , как редактировать другие системные курсоры .

Я провел большую часть выходных, выясняя это, но курсор i-beam в Xcode МОЖЕТ быть отредактирован. Это просто файл TIFF в следующем месте для Xcode 3.2.6 (и более ранний, я полагаю, но не проверял):

/ Разработчик / Library / PrivateFrameworks / XcodeEdit.framework / Версии / A / Ресурсы / TIbeam.tiff

Xcode 4.1 имеет тот же файл, но он не влияет на i-beam в главном редакторе (я предполагаю, что он где-то используется, но, возможно, нет). Вместо этого главный редактор в Xcode 4.1 использует этот файл:

/ Разработчик / Library / PrivateFrameworks / DVTKit.framework / Версии / A / Ресурсы / DVTIbeamCursor.tiff

Файлы ibeam снова переместились в Xcode 4.4:

/ Применения / Xcode.app / Содержание / OtherFrameworks / XcodeEdit.framework / Версии / A / Ресурсы / TIbeam.tiff

/ Применения / Xcode.app / Содержание / SharedFrameworks / DVTKit.framework / Версии / A / Ресурсы / DVTIbeamCursor.png

/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/DVTIbeamCursor@2x.png

Редактирования DVTIbeamCursor.png было достаточно, чтобы изменить i-beam в главном редакторе моей системы. На другом сайте кто-то сообщил, что DVTIbeamCursor@2x.png будет использоваться на дисплее сетчатки или других новых дисплеях Apple с высоким разрешением, таких как Thunderbolt и Cinema. Кто знает, используется ли TIbeam.tiff больше, поскольку они не обновили его до png.

Согласно комментариям ниже, в Xcode 5.0.2 все 3 файла курсора были заменены одним файлом:

/ Применения / Xcode.app / Содержание / OtherFrameworks / XcodeEdit.framework / Версии / A / Ресурсы / DVTIbeamCursor.tiff

И в 5.1.1 (мальчик, они уверены, что любят что-то менять почти в каждой версии, не так ли?):

/ Применения / Xcode.app / Содержание / SharedFrameworks / DVTKit.framework / Версии / A / Re / источники DVTIbeamCursor.tiff

Я предполагаю, что файл представляет собой курсор с двойным разрешением (он же дисплей сетчатки), который уменьшен для экранов без сетчатки.

Если вы не можете найти файл ibeam в своем Xcode, попробуйте выполнить эту команду в терминале:

sudo find / -name ' Ibeam ' -print

В Xcode 7.3 курсор был перемещен внутри следующего файла пакета, поэтому команда поиска выше не найдет его:

/ Применения / Xcode.app / Содержание / SharedFrameworks / DVTKit.framework / Ресурсы / Assets.car

Я рекомендую использовать процесс, найденный здесь , чтобы установить новый курсор в файл комплекта. Если вам не нравится курсор, который он устанавливает (я чувствовал, что он все еще слишком темный, а серые контуры смешиваются с серым текстом комментария), выполните следующие действия:

  1. Загрузите последнюю версию Theme Engine (я успешно использовал версию 1.0.0 (111) с Xcode 7.3.1)
  2. Резервное копирование /Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Assets.car
  3. Скопируйте Assets.car куда-нибудь, где его можно редактировать, например ~/Documents/Assets.car.
  4. Запустите Theme Engine.app, нажмите Open Document, затем откройте ~/Documents/Assets.car.
  5. Прокрутите список элементов слева и выберите DVTIbeamCursor.
  6. Вы должны увидеть изображение курсора ibeam с нормальным и двойным разрешением на центральной панели. Перетащите ваше собственное изображение ibeam поверх любого курсора, и оно должно измениться, чтобы показать ваше изображение. Я использовал изображение PNG.
  7. Сохраните, затем закройте Theme Engine.
  8. Переместите измененный Assets.car обратно на /Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Assets.car и сохраните резервную копию измененной версии где-нибудь, чтобы вам не приходилось делать это снова, пока новая версия Xcode не изменит то, что в Assets.car.

Возможно, вы также захотите отправить сердитое письмо в Apple с жалобой на то, что они не исправили эту проблему в последние 7+ лет, и вместо этого усложнили пользователям задачу исправления сломанного курсора Apple.

Не забудьте сохранить резервные копии отредактированных курсоров. Более новые версии XCode будут перезаписывать ваши пользовательские курсоры на стандартные по умолчанию при обновлении программного обеспечения.

Вот курсор ibeam, который я использую: In png format Щелкните правой кнопкой мыши ibeam и выберите сохранение изображения, чтобы получить версию png, или нажмите здесь , чтобы загрузить версию tiff.

Если вы создаете свой собственный курсор, обратите внимание, что там, где черные линии пересекаются в исходном курсоре, это место, где белые линии пересекаются в моем курсоре. Это потому, что оригинальный курсор предназначался для использования на белом фоне, поэтому его черная часть находится там, где находится точка курсора.

8 голосов
/ 23 января 2014

Я создал публичное репо для курсора ibeam, который должен работать на светлом и темном цветном фоне, потому что он черный с белым контуром. Он включает в себя краткие инструкции и файл TIFF, готовый для отправки в комплект Xcode.

Обновление: в репозитории git есть сценарий оболочки, который делает установку довольно простой.

2 голосов
/ 02 июля 2013

Для предварительного просмотра Xcode 5 я создал лучшие шаблоны цвета I-Beam для Dark. Вы можете использовать его свободно. http://www.scigems.org/wordpress/?p=92

2 голосов
/ 27 августа 2011

К сожалению, это разница между курсорами Carbon и Cocoa - курсоры Cocoa не инвертируются; по крайней мере, до снежного барса. В Lion даже карбоновые курсоры ведут себя так, как вы не хотите.

Если у вас есть машина, на которой работает Snow Leopard или более ранняя версия, сравните поведение двутавровой балки, например, в BBEdit или TextWrangler (которые используют карбоновые курсоры); оно станет полностью белым на черном фоне. Даже это немного хрупко - когда я меняю увеличение экрана, ранее белый курсор BBEdit становится черным.

Вы все еще можете установить курсор углерода в вашем приложении Какао. Попробуйте это в подклассе NSTextView:

#import <Carbon/Carbon.h>
[...]

- (void)resetCursorRects;
{
    // disable existing cursor setting behavior
}

- (void)cursorUpdate:(NSEvent *)event;
{
    SetThemeCursor(kThemeIBeamCursor);
}

- (void)updateTrackingAreas;
{
    for (NSTrackingArea *trackingArea in [self trackingAreas])
        [self removeTrackingArea:trackingArea];

    NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:NSTrackingCursorUpdate | NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
}

(В 64-битной версии вы увидите, что эта функция исключена из заголовков, но символ есть и работает.) Если вы достаточно мотивированы, вы могли бы потенциально пропатчить Xcode, чтобы выполнить какой-либо из вариантов выше, возможно из плагина Xcode .

Если вы на льве, вот как это должно выглядеть:

Inverting cursor

Так что я бы предложил подать сообщение об ошибке в Apple, чтобы заставить системный курсор I-луча (или NSCursor в целом) правильно обрабатывать темные фоны; это не специфичная для Xcode проблема, и она должна была быть исправлена ​​много лет назад.

1 голос
/ 27 августа 2011

Согласно этой теме на форумах Apple:

https://discussions.apple.com/thread/2811447?start=0&tstart=0

"цвет курсора", указанный в настройках шрифтов и цветов XCode 4, фактически является курсором, который вы видите, когда нажимаете в окне для ввода текста.

Курсор двутаврового луча, который вы видите при перемещении мыши в окне редактирования кода, - это широкая функция Mac-OS, которую нельзя изменить в XCode.

В сообщении на форуме выше предлагается поиск стороннего программного обеспечения для изменения атрибутов общесистемного курсора двутавровой балки.

В другом посте указывается, что вы можете по крайней мере отредактировать размер курсора, чтобы сделать его более видимым:

Системные настройки -> Универсальный доступ -> Мышь и трекпад -> Размер курсора

...