Вопрос или проблема
Это странный случай. Несколько дней назад мне пришлось работать с закладками в Microsoft Word 2019 для Mac, чтобы настроить оглавление. Не могу вспомнить, чтобы я вносил какие-либо изменения в Настройки.
С тех пор, когда я открываю существующий документ в Word, вокруг текста, который я выделяю и копирую с помощью cmd+C, появляются серые квадратные скобки. Также добавляется закладка вокруг скопированного текста, и документ распознается как отредактированный, что требует сохранения изменений при закрытии.
Что происходит и как остановить это поведение?
Судя по всему, это давняя ошибка Microsoft Word, которая возникает при использовании менеджеров буфера обмена. В моем случае у меня был настроен менеджер буфера обмена в BetterTouchTool.
Удаление сочетания клавиш для менеджера буфера обмена решит эту проблему (отключение недостаточно).
Обновление: Я подал отчет об ошибке в BetterTouchTool, но мне кажется, что только Microsoft может действительно решить эту проблему.
Если первый элемент в NSPasteboard
возвращается с использованием either типа (UTI) com.microsoft.Link-Source
или com.microsoft.ObjectLink
, создается закладка вокруг скопированного текста. Не уверен, почему. Вероятно, это ошибка в MS Word.
Проверено с:
- macOS: Sequoia 15.3 (24D60)
- MS Word: Версия 16.93 (25011212)
Вы можете проверить это сами, скопировав текст в новом документе Word и затем запустив:
gcc min_bookmark.m -framework Foundation -framework Cocoa && ./a.out
min_bookmark.m
:
#import <Foundation/Foundation.h>
#import <AppKit/NSPasteboard.h>
void dont_break() {
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
// Получение содержимого буфера обмена для большинства типов (UTIs) не вызовет проблем
NSString* s = [pasteboard stringForType:NSPasteboardTypeString];
NSLog(@"%@", s);
}
void create_bookmark1() {
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSString *type = @"com.microsoft.Link-Source";
NSData *d = [pasteboard dataForType:type];
// NSLog(@"%@", d); // Не требуется для срыва
}
void create_bookmark2() {
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSString *type = @"com.microsoft.ObjectLink";
NSData *d = [pasteboard dataForType:type];
// NSLog(@"%@", d); // Не требуется для срыва
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
dont_break();
// create_bookmark1();
// create_bookmark2();
}
return 0;
}
Менеджеры буфера обмена обычно считывают данные из буфера обмена, но я не думаю, что в этом настоящая проблема. Однако я обошел эту проблему в своем собственном Hammerspoon Spoon CleanClip.spoon, избегая чтения этих типов. Другие могут внести аналогичные изменения.
Ответ или решение
Теория (Theory)
Проблема с автоматическим созданием закладок в Microsoft Word при копировании текста может показаться странной и неожиданной, особенно для пользователей, которые не изменяли настройки посторонних программ. Основное предположение — это баг, связанный с взаимодействием Word и менеджеров буфера обмена. Когда текст копируется в Word 2019 для Mac, происходит нежелательное добавление закладки и серых квадратных скобок вокруг выделенного текста, что делает документ "отредактированным", даже если фактически изменений не было.
Эта проблема, вероятно, связана с теми типами данных, которые менеджеры буфера обмена пытаются прочитать из буфера обмена (NSPasteboard). В данном случае основными подозреваемыми являются типы com.microsoft.Link-Source
и com.microsoft.ObjectLink
. Эти типы данных, будучи извлечёнными, вызывают создание закладок в копируемом тексте.
Пример (Example)
Вопрос поднят на нескольких форумах и был повторён многими пользователями, что говорит в пользу того, что ошибка не уникальна и может являться, вероятно, системным багом в самих продуктах Microsoft. Проблема замечена на платформе MacOS, что может указывать на специфические особенности взаимодействия в экосистеме Apple.
Приведённый в запросе пользовательский код на языке Objective-C иллюстрирует сам процесс работы с буфером обмена, и показывает различия в реакциях Word на разные типы данных. При извлечении типовых данных com.microsoft.Link-Source
и com.microsoft.ObjectLink
происходит создание закладок, которое никоим образом не связано с функциональностью менеджера буфера обмена, что подтверждает наличие бага именно на стороне Microsoft Word.
Применение (Application)
Чтобы временно устранить проблему, пользователи могли бы остановить работу или удалить горячие клавиши, пригруппированные для менеджера буфера обмена, как показано на примере BetterTouchTool. Кроме того, на время принято решение не использовать специфические типы данных буфера обмена с Microsoft Word, что также подтвердил другой пользователь, внесший изменения в свой Hammerspoon Spoon для игнорирования этих типов данных с помощью CleanClip.spoon
.
Однако данное решение является временным обходным решением, так как проблема кроется глубже и требует исправления непосредственно от Microsoft. Это может быть достигнуто через различные пути: пользователи могут подавать отчёты об ошибках в Microsoft, добиваясь её устранения в будущих обновлениях программного обеспечения.
Кроме того, одним из возможных решений может быть более глубокая интеграция и поддержка различных типов данных буфера обмена, что исключит взаимодействие с нежелательными типами данных. Это может быть полезным шагом для разработчиков, работающих с MacOS.
Так или иначе, для устранения этой проблемы или полного её понимания требуется сотрудничество и между разработчиками Microsoft, и сторонними приложениями, которые обеспечивают взаимодействие с буфером обмена.
Кратко, несмотря на существующие временные обходные пути, проблема коренится в прерывающемся взаимодействии трех элементов: Microsoft Word, MacOS и сторонних менеджеров буфера обмена. Понимание сути проблемы и принятие временных мер помогут избежать неудобств до окончательного решения.