דילוג לתוכן
0
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
עיצובים
  • בהיר
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • כהה
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו אתר

פורום אוצריא

אוצריא - דף הבית
|
קח שותפות בהוספת ספרים
|
תרום לאוצריא
  1. דף הבית
  2. מדריכים ותוכנות עזר לאוצריא
  3. תוספים לאוצריא - דיונים
  4. להורדה | תוסף "וורד לאוצריא" - להורדה, לבדיקה, לתיקון ושיפור.

להורדה | תוסף "וורד לאוצריא" - להורדה, לבדיקה, לתיקון ושיפור.

מתוזמן נעוץ נעול הועבר תוספים לאוצריא - דיונים
תוספיםוורדהורדההקלדה
154 פוסטים 30 כותבים 6.2k צפיות 19 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • דאנציגד דאנציג

      @י.-פל. כתב:

      זה יכול לעבור אותו בקלות.

      אתה נותן לנו תאבון...
      אולי יתחילו לעמד ב'אוצריא' - "מהלימוד עד לדפוס", 'עימוד אוטומטי בלחיצת כפתור', ועוד שלל חלומות ופנטזיות - רב טקסט, צורת הדף, וכו'.
      אולי מפתחי תוספי וורד בתשלום יתחילו לעשות תוספים בתשלום לאוצריא.
      אבל נעצור בזה, שלא תחליט לחסום לנו את ארץ האפשרויות הבלתי מוגבלות.

      יאיר דניאלי
      יאיר דניאלי
      יאיר דניאל
      תורם לאוצריא ניהול תוספים
      כתב ב נערך לאחרונה על ידי
      #84

      @דאנציג ואווי ואווי...
      אצטרך צוות שלם לעבוד על כל זה - ואז @י.-פל. יתנגד להעלאה של התוסף הזה כי אוצריא לא נוצרה למטרות רווח... 🙂

      תגובה 1 תגובה אחרונה
      3
      • י. פל.י י. פל.

        @יאיר-דניאל
        אם אתה משתמש בספריות הנכונות, ומיישם את הפונקציות כמו שצריך - אתה יכול להגיע רחוק מאוד מאוד.
        אבל, חשוב מאוד: אל תתפזר!!!
        תכנן משהו אחד, תעשה אותו עד הסוף. גמרת? משתמשים, באגים, תיקונים וכולי.
        אבל לדעתי - אתה עושה טעות...
        מה האינטרס שלך? נתת כבר חלק יפה מאוד מהפונקציונליות, למה צריך הכל? למה זה טוב?

        יאיר דניאלי
        יאיר דניאלי
        יאיר דניאל
        תורם לאוצריא ניהול תוספים
        כתב ב נערך לאחרונה על ידי
        #85

        @י.-פל. כתב:

        תכנן משהו אחד, תעשה אותו עד הסוף. גמרת? משתמשים, באגים, תיקונים וכולי.
        אבל לדעתי - אתה עושה טעות...
        מה האינטרס שלך? נתת כבר חלק יפה מאוד מהפונקציונליות, למה צריך הכל? למה זה טוב?

        אתה צודק בהחלט, אני לא הולך להתמקד בזה - בכ"א לא עכשיו.
        אחרי שזה באמת יעבוד טוב - והתגובות היחידות שאקבל יהיו בין - האם אפשר גם שזה ירחף באוויר ל - איפה היית עד היום (ספוייילר: הייתי פה ממש קרוב, קצת אחרי הפינה שם)
        אז אולי אתן לקלוד לעבוד על זה בשעות השינה שלי...

        צבי דורש ציוןצ תגובה 1 תגובה אחרונה
        4
        • יאיר דניאלי יאיר דניאל

          @י.-פל. כתב:

          תכנן משהו אחד, תעשה אותו עד הסוף. גמרת? משתמשים, באגים, תיקונים וכולי.
          אבל לדעתי - אתה עושה טעות...
          מה האינטרס שלך? נתת כבר חלק יפה מאוד מהפונקציונליות, למה צריך הכל? למה זה טוב?

          אתה צודק בהחלט, אני לא הולך להתמקד בזה - בכ"א לא עכשיו.
          אחרי שזה באמת יעבוד טוב - והתגובות היחידות שאקבל יהיו בין - האם אפשר גם שזה ירחף באוויר ל - איפה היית עד היום (ספוייילר: הייתי פה ממש קרוב, קצת אחרי הפינה שם)
          אז אולי אתן לקלוד לעבוד על זה בשעות השינה שלי...

          צבי דורש ציוןצ
          צבי דורש ציוןצ
          צבי דורש ציון
          כתב ב נערך לאחרונה על ידי
          #86

          @יאיר-דניאל מה הגירסה האחרונה (אתה מעדכן בפוסט הראשון כל פעם?)

          תגובה 1 תגובה אחרונה
          0
          • יאיר דניאלי
            יאיר דניאלי
            יאיר דניאל
            תורם לאוצריא ניהול תוספים
            כתב ב נערך לאחרונה על ידי
            #87

            הגירסה האחרונה היא מה שבחנות.
            הרגע מעדכן את הפוסט הראשון גם.

            צבי דורש ציוןצ תגובה 1 תגובה אחרונה
            1
            • י. פל.י י. פל.

              @יאיר-דניאל
              אם אתה משתמש בספריות הנכונות, ומיישם את הפונקציות כמו שצריך - אתה יכול להגיע רחוק מאוד מאוד.
              אבל, חשוב מאוד: אל תתפזר!!!
              תכנן משהו אחד, תעשה אותו עד הסוף. גמרת? משתמשים, באגים, תיקונים וכולי.
              אבל לדעתי - אתה עושה טעות...
              מה האינטרס שלך? נתת כבר חלק יפה מאוד מהפונקציונליות, למה צריך הכל? למה זה טוב?

              המלאךה
              המלאךה
              המלאך
              מפתח
              כתב ב נערך לאחרונה על ידי
              #88

              @י.-פל. איך זה אפשרי?
              התוסף בנוי טייפ סקריפט.
              זה יצרוך כמויות של קוד רק בשביל הסינכרון של הטקסט עם הגלילה,
              יש עוד עשרות דברים שלוקחים כמויות שורות קוד..

              רק לחשוב על לכתוב את זה עושה לי שחור בעיניים..

              י. פל.י תגובה 1 תגובה אחרונה
              0
              • יאיר דניאלי יאיר דניאל

                הגירסה האחרונה היא מה שבחנות.
                הרגע מעדכן את הפוסט הראשון גם.

                צבי דורש ציוןצ
                צבי דורש ציוןצ
                צבי דורש ציון
                כתב ב נערך לאחרונה על ידי
                #89

                @יאיר-דניאל
                באנדרואיד
                c0e4ff94-0aab-4bc2-beee-5284fadd7660-image.jpeg

                תגובה 1 תגובה אחרונה
                0
                • המלאךה המלאך

                  @י.-פל. איך זה אפשרי?
                  התוסף בנוי טייפ סקריפט.
                  זה יצרוך כמויות של קוד רק בשביל הסינכרון של הטקסט עם הגלילה,
                  יש עוד עשרות דברים שלוקחים כמויות שורות קוד..

                  רק לחשוב על לכתוב את זה עושה לי שחור בעיניים..

                  י. פל.י
                  י. פל.י
                  י. פל.
                  כתב ב נערך לאחרונה על ידי
                  #90

                  @המלאך כתב:

                  זה יצרוך כמויות של קוד רק בשביל הסינכרון של הטקסט עם הגלילה,

                  נו, ואז מה?
                  תוסף יכול לקבל קבצי קוד מרובים.
                  למען האמת, בתוסף ש @ע-ה-דכו-ע מתכנן להוציא אי-פעם, יש ערימת קבצים לא מבוטלת...

                  המלאךה תגובה 1 תגובה אחרונה
                  0
                  • י. פל.י י. פל.

                    @המלאך כתב:

                    זה יצרוך כמויות של קוד רק בשביל הסינכרון של הטקסט עם הגלילה,

                    נו, ואז מה?
                    תוסף יכול לקבל קבצי קוד מרובים.
                    למען האמת, בתוסף ש @ע-ה-דכו-ע מתכנן להוציא אי-פעם, יש ערימת קבצים לא מבוטלת...

                    המלאךה
                    המלאךה
                    המלאך
                    מפתח
                    כתב ב נערך לאחרונה על ידי
                    #91

                    @י.-פל. לא אמרתי שלא הגיוני.
                    רק שקצת קשה ליצור כזה דבר בלי ערימות טוקנים בקלוד..
                    ולא נראה לי שיש פה מלייאדרים.

                    תגובה 1 תגובה אחרונה
                    0
                    • יאיר דניאלי יאיר דניאל

                      @חד-בדרא כתב:

                      אולי גם תוסיף את תוסף עיצוב תורני לוורד לוורד הזה..

                      פחות...
                      זה מבוסס על פקודות מאקרו, שאין בתוסף - כלומר יש, אבל זה בנוי שונה לגמרי.
                      וזה לא יכול להתקרב לרמה של VBA.

                      חד בדראח
                      חד בדראח
                      חד בדרא
                      כתב ב נערך לאחרונה על ידי
                      #92

                      @יאיר-דניאל כתב:

                      זה מבוסס על פקודות מאקרו, שאין בתוסף - כלומר יש, אבל זה בנוי שונה לגמרי.

                      התכוונתי שתקח משם ותתן לגברת בינה השראות לרעיונות לשיפוץ
                      אחרי הכל פיתחת את זה לתורני

                      תגובה 1 תגובה אחרונה
                      0
                      • מ
                        מ
                        מתענין
                        כתב ב נערך לאחרונה על ידי
                        #93

                        בכל הגירסאות האחרונות הלחצנים של התוסף לא עובדים אצלי בכלל
                        הגירסה הראשונה לשם שינוי עבדה מעולה

                        יאיר דניאלי תגובה 1 תגובה אחרונה
                        0
                        • מ מתענין

                          בכל הגירסאות האחרונות הלחצנים של התוסף לא עובדים אצלי בכלל
                          הגירסה הראשונה לשם שינוי עבדה מעולה

                          יאיר דניאלי
                          יאיר דניאלי
                          יאיר דניאל
                          תורם לאוצריא ניהול תוספים
                          כתב ב נערך לאחרונה על ידי
                          #94

                          @מתענין כתב:

                          בכל הגירסאות האחרונות הלחצנים של התוסף לא עובדים אצלי בכלל
                          הגירסה הראשונה לשם שינוי עבדה מעולה

                          עוד מישהו?

                          חנניהח מ 2 תגובות תגובה אחרונה
                          0
                          • יאיר דניאלי יאיר דניאל

                            @מתענין כתב:

                            בכל הגירסאות האחרונות הלחצנים של התוסף לא עובדים אצלי בכלל
                            הגירסה הראשונה לשם שינוי עבדה מעולה

                            עוד מישהו?

                            חנניהח
                            חנניהח
                            חנניה
                            כתב ב נערך לאחרונה על ידי
                            #95

                            @יאיר-דניאל אצלי בגדול עובד, למעט פתח בקורא וחפש בספריה

                            תגובה 1 תגובה אחרונה
                            1
                            • בננהב
                              בננהב
                              בננה
                              כתב ב נערך לאחרונה על ידי פלמנמוני
                              #96
                              פוסט זה נמחק!
                              תגובה 1 תגובה אחרונה
                              0
                              • בננהב
                                בננהב
                                בננה
                                כתב ב נערך לאחרונה על ידי פלמנמוני
                                #97
                                פוסט זה נמחק!
                                תגובה 1 תגובה אחרונה
                                0
                                • בננהב
                                  בננהב
                                  בננה
                                  כתב ב נערך לאחרונה על ידי
                                  #98

                                  @יאיר-דניאל,

                                  ביקשתי מה-AI ב-VS Code לסייע לי בבניית מהדורה של LibreOffice עם הערות ברצף. הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                                  ביקשתי ממנו לסכם את התהליך שביצע (או תכנן לבצע), ואני מצרף את הסיכום כאן בספוילר.

                                  # מיקום אופקי של הערות ב-LibreOffice Writer - תיעוד שינויים

                                  מי כתב את זה?
                                  אני Cascade, AI coding assistant מבית Cognition. המשתמש ביקש ממני לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות (comments/annotations) אחת אחרי השנייה באותה שורה במקום שכל הערה תתחיל בשורה חדשה.

                                  המטרה
                                  ב-LibreOffice Writer, כאשר מספר הערות מקושרות לאותה שורת טקסט, הן מופיעות אחת מתחת לשנייה בסרגל הצד. המטרה היא לאפשר שהערות שמקושרות לאותה שורה יופיעו זו לצד זו (אופקית) – ברצף, ולא כל אחת בשורה חדשה.

                                  ארכיטקטורת הקוד
                                  מודול Writer = sw/
                                  כל הקוד הרלוונטי נמצא תחת sw/source/uibase/docvw/

                                  קבצים מרכזיים
                                  קובץ תפקיד
                                  sw/source/uibase/docvw/PostItMgr.cxx הקובץ הראשי – ניהול ופריסת כל ההערות
                                  sw/inc/postithelper.hxx מבנה SwLayoutInfo + SwAnnotationItem
                                  לוגיקת הפריסה הנוכחית
                                  LayoutPostIts() ← נקראת בכל רענון
                                  └── LayoutByPage() ← מפרסת הערות לפי עמוד, מונעת חפיפה אנכית
                                  └── SetPosSizePixelRect() ← קובע מיקום וגודל לכל הערה
                                  כיצד נקבע המיקום כיום (לפני השינוי):

                                  // Y נקבע לפי מיקום ה-anchor בטקסט
                                  tools::Long nY = mpEditWin->LogicToPixel(
                                  Point(0, pItem->maLayoutInfo.mPosition.Bottom())).Y();

                                  // X נקבע תמיד לאותו ערך קבוע
                                  tools::Long nX = mlPageBorder; // ← הבעיה! תמיד אותו X
                                  השינויים שבוצעו
                                  שינוי 1: הוספת שדה mLayoutX למבנה SwAnnotationItem
                                  קובץ: sw/inc/postithelper.hxx

                                  שורה: 106

                                  תוכן השינוי:

                                  class SAL_DLLPUBLIC_RTTI SwAnnotationItem final
                                  {
                                  public:
                                  VclPtrsw::annotation::SwAnnotationWin mpPostIt;
                                  bool mbShow;
                                  bool mbFocus;
                                  bool mbPendingLayout;
                                  SwPostItHelper::SwLayoutStatus mLayoutStatus;
                                  SwLayoutInfo maLayoutInfo;
                                  tools::Long mLayoutX = 0; // מיקום אופקי מחושב ← שדה חדש
                                  הסבר: הוספתי שדה חדש mLayoutX למחלקה SwAnnotationItem כדי לשמור את המיקום האופקי המחושב של כל הערה.

                                  שינוי 2: שינוי לוגיקת הפריסה ב-PostItMgr.cxx
                                  קובץ: sw/source/uibase/docvw/PostItMgr.cxx

                                  פונקציה: LayoutPostIts()

                                  שורות: 990-1139

                                  תוכן השינוי:

                                  לפני השינוי (הקוד המקורי):
                                  for (auto const& pItem : pPage->mvSidebarItems)
                                  {
                                  if (pItem->mbShow)
                                  {
                                  // ... קוד ליצירת חלון הערה ...

                                      tools::Long Y = mpEditWin->LogicToPixel(
                                          Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                      
                                      // ... חישוב גובה ההערה ...
                                      
                                      pPostIt->SetPosSizePixelRect( mlPageBorder ,  // ← תמיד אותו X
                                                                    Y - GetInitialAnchorDistance(),
                                                                    nSidebarWidth,
                                                                    aPostItHeight,
                                                                    mlPageEnd );
                                  }
                                  

                                  }
                                  אחרי השינוי (הקוד החדש):
                                  // שלב א: קיבוץ הערות לפי Y וחישוב מיקום אופקי
                                  std::map<tools::Long, std::vector<SwAnnotationItem*>> aRowGroups;
                                  for (auto const& pItem : pPage->mvSidebarItems)
                                  {
                                  if (pItem->mbShow)
                                  {
                                  tools::Long Y = mpEditWin->LogicToPixel(
                                  Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                  aRowGroups[Y].push_back(pItem.get());
                                  }
                                  }

                                  // שלב ב: לכל קבוצת Y – הקצה X שונה לכל הערה
                                  tools::Long mlPageBorder = 0;
                                  tools::Long mlPageEnd = 0;

                                  if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::LEFT )
                                  {
                                  mlPageBorder = mpEditWin->LogicToPixel(Point(pPage->mPageRect.Left(), 0)).X() - nSidebarWidth;
                                  }
                                  else if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::RIGHT )
                                  {
                                  mlPageBorder = mpEditWin->LogicToPixel( Point(pPage->mPageRect.Right(), 0)).X() + GetSidebarBorderWidth(true);
                                  }

                                  for (auto& [nY, aGroup] : aRowGroups)
                                  {
                                  tools::Long nX = mlPageBorder;
                                  for (auto* pItem : aGroup)
                                  {
                                  pItem->mLayoutX = nX;
                                  // חשב את הרוחב של ההערה
                                  bool bCreated = false;
                                  VclPtr<SwAnnotationWin> pPostIt = GetOrCreateAnnotationWindow(*pItem, bCreated);
                                  if (bCreated)
                                  {
                                  aCreatedPostIts.insert(pPostIt);
                                  }

                                      tools::Long nTextHeight;
                                      if (pPostIt->GetSizePixel().Width() == nSidebarWidth)
                                          nTextHeight = pPostIt->GetPostItTextHeight();
                                      else
                                          nTextHeight = pPostIt->GuessTextHeightForWidth(nSidebarWidth);
                                  
                                      tools::Long postItPixelTextHeight
                                          = (comphelper::LibreOfficeKit::isActive()
                                                 ? mpEditWin->LogicToPixel(Point(0, nTextHeight)).Y()
                                                 : nTextHeight);
                                      tools::Long aPostItHeight
                                          = (postItPixelTextHeight < pPostIt->GetMinimumSizeWithoutMeta()
                                                 ? pPostIt->GetMinimumSizeWithoutMeta()
                                                 : postItPixelTextHeight)
                                            + pPostIt->GetMetaHeight();
                                  
                                      nX += nSidebarWidth + GetSpaceBetween();
                                  }
                                  

                                  }

                                  // שלב ג: השתמש ב-mLayoutX בקריאה ל-SetPosSizePixelRect
                                  for (auto const& pItem : pPage->mvSidebarItems)
                                  {
                                  if (pItem->mbShow)
                                  {
                                  // ... קוד ליצירת חלון הערה ...

                                      tools::Long Y = mpEditWin->LogicToPixel(
                                          Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                      
                                      // ... חישוב גובה ההערה ...
                                      
                                      pPostIt->SetPosSizePixelRect( pItem->mLayoutX ,  // ← מיקום X מחושב
                                                                    Y - GetInitialAnchorDistance(),
                                                                    nSidebarWidth,
                                                                    aPostItHeight,
                                                                    mlPageEnd );
                                  }
                                  

                                  }
                                  הסבר:

                                  שלב א: קיבוץ הערות לפי מיקום Y (שורה בטקסט)
                                  שלב ב: לכל קבוצת Y, חישוב מיקום X שונה לכל הערה - הערות מקבלות מיקום X שונה בסדר
                                  שלב ג: שימוש ב-mLayoutX בקריאה ל-SetPosSizePixelRect במקום mlPageBorder קבוע
                                  איך זה עובד
                                  הערות באותה שורה (אותו Y) יופיעו זו לצד זו
                                  המרחק בין הערות נקבע על ידי nSidebarWidth + GetSpaceBetween()
                                  הערות בשורות שונות יופיעו אחת מתחת לשנייה כרגיל
                                  איך לבנות את הקוד
                                  דרישות מקדימות

                                  ודא שהכלים הבאים מותקנים:

                                  git --version # נדרש git
                                  cmake --version # נדרש cmake 3.15+
                                  make --version # או ninja
                                  gcc --version # gcc 7+ או clang 8+
                                  שלב 1: הורדת הקוד (אם עדיין לא הורד)

                                  Clone מלא (גדול! ~4GB)

                                  git clone https://gerrit.libreoffice.org/core libreoffice
                                  cd libreoffice

                                  או: clone רדוד יותר (מהיר יותר לפיתוח)

                                  git clone --depth=1 https://gerrit.libreoffice.org/core libreoffice
                                  cd libreoffice

                                  משיכת submodules

                                  git submodule update --init
                                  שלב 2: הגדרת build
                                  על Linux/macOS:
                                  ./autogen.sh
                                  --enable-debug
                                  --disable-online-update
                                  --without-java
                                  --without-help
                                  --without-myspell-dicts
                                  על Windows (MSYS2):
                                  ./autogen.sh --enable-debug --disable-online-update
                                  על Windows (WSL - מומלץ):

                                  התקנת WSL

                                  wsl --install

                                  בתוך WSL

                                  cd /mnt/e/המצאות/NAU\ WORD/2048/core
                                  ./autogen.sh --enable-debug --disable-online-update
                                  שלב 3: בנייה – רק מודול Writer (מהיר!)

                                  בנייה ראשונית מלאה (פעם אחת – עלולה לקחת 30-90 דקות)

                                  make -j$(nproc)

                                  לאחר שינויים בקבצי sw בלבד, בנה רק את המודול:

                                  make sw -j$(nproc)

                                  בנייה מהירה עוד יותר עם ninja:

                                  make -j$(nproc) build-nocheck
                                  שלב 4: בדיקת השינויים

                                  הרצת LibreOffice עם השינויים

                                  ./instdir/program/swriter

                                  פתח מסמך עם מספר הערות באותה שורה ובדוק שהן מופיעות זו לצד זו

                                  שלב 5: הרצת טסטים

                                  טסטים ספציפיים למודול Writer

                                  make sw_uicheck

                                  טסטים של annotations בלבד

                                  cd sw && make CppunitTest_sw_uiwriter
                                  נקודות תשומת לב
                                  אל תשנה את לוגיקת ה-anchor – רק את חישוב ה-X
                                  שמור על ה-POSTIT_SPACE_BETWEEN הקיים בין הערות
                                  בדוק מקרי קצה: הערה אחת בשורה (צריכה להתנהג כרגיל), הערות בעמודות שונות
                                  שים לב ל-RTL (עברית/ערבית) – המיקום האופקי מתהפך
                                  הקובץ הקריטי הוא PostItMgr.cxx – 90% מהשינוי שם
                                  חפש את הסמן mlPageBorder בקוד – כל מקום שמשתמש בו לציר X הוא מועמד לשינוי
                                  קבצים ששונו
                                  sw/inc/postithelper.hxx - שורה 106 (הוספת שדה mLayoutX)
                                  sw/source/uibase/docvw/PostItMgr.cxx - שורות 990-1139 (שינוי לוגיקת פריסה)
                                  סיכום
                                  השינויים האלו מאפשרים להערות שמקושרות לאותה שורה בטקסט להופיע זו לצד זו במקום אחת מתחת לשנייה. השינוי הוא מינימלי וממוקד, ומשתמש במנגנון הקיים של LibreOffice לפריסת הערות, רק עם לוגיקה שונה לחישוב המיקום האופקי.

                                  תאריך: 20 במאי 2026
                                  נכתב על ידי: Cascade (AI coding assistant)
                                  בקשה מקורית: לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות אחת אחרי השנייה באותה שורה

                                  י. פל.י המלאךה 2 תגובות תגובה אחרונה
                                  1
                                  • בננהב בננה

                                    @יאיר-דניאל,

                                    ביקשתי מה-AI ב-VS Code לסייע לי בבניית מהדורה של LibreOffice עם הערות ברצף. הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                                    ביקשתי ממנו לסכם את התהליך שביצע (או תכנן לבצע), ואני מצרף את הסיכום כאן בספוילר.

                                    # מיקום אופקי של הערות ב-LibreOffice Writer - תיעוד שינויים

                                    מי כתב את זה?
                                    אני Cascade, AI coding assistant מבית Cognition. המשתמש ביקש ממני לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות (comments/annotations) אחת אחרי השנייה באותה שורה במקום שכל הערה תתחיל בשורה חדשה.

                                    המטרה
                                    ב-LibreOffice Writer, כאשר מספר הערות מקושרות לאותה שורת טקסט, הן מופיעות אחת מתחת לשנייה בסרגל הצד. המטרה היא לאפשר שהערות שמקושרות לאותה שורה יופיעו זו לצד זו (אופקית) – ברצף, ולא כל אחת בשורה חדשה.

                                    ארכיטקטורת הקוד
                                    מודול Writer = sw/
                                    כל הקוד הרלוונטי נמצא תחת sw/source/uibase/docvw/

                                    קבצים מרכזיים
                                    קובץ תפקיד
                                    sw/source/uibase/docvw/PostItMgr.cxx הקובץ הראשי – ניהול ופריסת כל ההערות
                                    sw/inc/postithelper.hxx מבנה SwLayoutInfo + SwAnnotationItem
                                    לוגיקת הפריסה הנוכחית
                                    LayoutPostIts() ← נקראת בכל רענון
                                    └── LayoutByPage() ← מפרסת הערות לפי עמוד, מונעת חפיפה אנכית
                                    └── SetPosSizePixelRect() ← קובע מיקום וגודל לכל הערה
                                    כיצד נקבע המיקום כיום (לפני השינוי):

                                    // Y נקבע לפי מיקום ה-anchor בטקסט
                                    tools::Long nY = mpEditWin->LogicToPixel(
                                    Point(0, pItem->maLayoutInfo.mPosition.Bottom())).Y();

                                    // X נקבע תמיד לאותו ערך קבוע
                                    tools::Long nX = mlPageBorder; // ← הבעיה! תמיד אותו X
                                    השינויים שבוצעו
                                    שינוי 1: הוספת שדה mLayoutX למבנה SwAnnotationItem
                                    קובץ: sw/inc/postithelper.hxx

                                    שורה: 106

                                    תוכן השינוי:

                                    class SAL_DLLPUBLIC_RTTI SwAnnotationItem final
                                    {
                                    public:
                                    VclPtrsw::annotation::SwAnnotationWin mpPostIt;
                                    bool mbShow;
                                    bool mbFocus;
                                    bool mbPendingLayout;
                                    SwPostItHelper::SwLayoutStatus mLayoutStatus;
                                    SwLayoutInfo maLayoutInfo;
                                    tools::Long mLayoutX = 0; // מיקום אופקי מחושב ← שדה חדש
                                    הסבר: הוספתי שדה חדש mLayoutX למחלקה SwAnnotationItem כדי לשמור את המיקום האופקי המחושב של כל הערה.

                                    שינוי 2: שינוי לוגיקת הפריסה ב-PostItMgr.cxx
                                    קובץ: sw/source/uibase/docvw/PostItMgr.cxx

                                    פונקציה: LayoutPostIts()

                                    שורות: 990-1139

                                    תוכן השינוי:

                                    לפני השינוי (הקוד המקורי):
                                    for (auto const& pItem : pPage->mvSidebarItems)
                                    {
                                    if (pItem->mbShow)
                                    {
                                    // ... קוד ליצירת חלון הערה ...

                                        tools::Long Y = mpEditWin->LogicToPixel(
                                            Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                        
                                        // ... חישוב גובה ההערה ...
                                        
                                        pPostIt->SetPosSizePixelRect( mlPageBorder ,  // ← תמיד אותו X
                                                                      Y - GetInitialAnchorDistance(),
                                                                      nSidebarWidth,
                                                                      aPostItHeight,
                                                                      mlPageEnd );
                                    }
                                    

                                    }
                                    אחרי השינוי (הקוד החדש):
                                    // שלב א: קיבוץ הערות לפי Y וחישוב מיקום אופקי
                                    std::map<tools::Long, std::vector<SwAnnotationItem*>> aRowGroups;
                                    for (auto const& pItem : pPage->mvSidebarItems)
                                    {
                                    if (pItem->mbShow)
                                    {
                                    tools::Long Y = mpEditWin->LogicToPixel(
                                    Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                    aRowGroups[Y].push_back(pItem.get());
                                    }
                                    }

                                    // שלב ב: לכל קבוצת Y – הקצה X שונה לכל הערה
                                    tools::Long mlPageBorder = 0;
                                    tools::Long mlPageEnd = 0;

                                    if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::LEFT )
                                    {
                                    mlPageBorder = mpEditWin->LogicToPixel(Point(pPage->mPageRect.Left(), 0)).X() - nSidebarWidth;
                                    }
                                    else if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::RIGHT )
                                    {
                                    mlPageBorder = mpEditWin->LogicToPixel( Point(pPage->mPageRect.Right(), 0)).X() + GetSidebarBorderWidth(true);
                                    }

                                    for (auto& [nY, aGroup] : aRowGroups)
                                    {
                                    tools::Long nX = mlPageBorder;
                                    for (auto* pItem : aGroup)
                                    {
                                    pItem->mLayoutX = nX;
                                    // חשב את הרוחב של ההערה
                                    bool bCreated = false;
                                    VclPtr<SwAnnotationWin> pPostIt = GetOrCreateAnnotationWindow(*pItem, bCreated);
                                    if (bCreated)
                                    {
                                    aCreatedPostIts.insert(pPostIt);
                                    }

                                        tools::Long nTextHeight;
                                        if (pPostIt->GetSizePixel().Width() == nSidebarWidth)
                                            nTextHeight = pPostIt->GetPostItTextHeight();
                                        else
                                            nTextHeight = pPostIt->GuessTextHeightForWidth(nSidebarWidth);
                                    
                                        tools::Long postItPixelTextHeight
                                            = (comphelper::LibreOfficeKit::isActive()
                                                   ? mpEditWin->LogicToPixel(Point(0, nTextHeight)).Y()
                                                   : nTextHeight);
                                        tools::Long aPostItHeight
                                            = (postItPixelTextHeight < pPostIt->GetMinimumSizeWithoutMeta()
                                                   ? pPostIt->GetMinimumSizeWithoutMeta()
                                                   : postItPixelTextHeight)
                                              + pPostIt->GetMetaHeight();
                                    
                                        nX += nSidebarWidth + GetSpaceBetween();
                                    }
                                    

                                    }

                                    // שלב ג: השתמש ב-mLayoutX בקריאה ל-SetPosSizePixelRect
                                    for (auto const& pItem : pPage->mvSidebarItems)
                                    {
                                    if (pItem->mbShow)
                                    {
                                    // ... קוד ליצירת חלון הערה ...

                                        tools::Long Y = mpEditWin->LogicToPixel(
                                            Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                        
                                        // ... חישוב גובה ההערה ...
                                        
                                        pPostIt->SetPosSizePixelRect( pItem->mLayoutX ,  // ← מיקום X מחושב
                                                                      Y - GetInitialAnchorDistance(),
                                                                      nSidebarWidth,
                                                                      aPostItHeight,
                                                                      mlPageEnd );
                                    }
                                    

                                    }
                                    הסבר:

                                    שלב א: קיבוץ הערות לפי מיקום Y (שורה בטקסט)
                                    שלב ב: לכל קבוצת Y, חישוב מיקום X שונה לכל הערה - הערות מקבלות מיקום X שונה בסדר
                                    שלב ג: שימוש ב-mLayoutX בקריאה ל-SetPosSizePixelRect במקום mlPageBorder קבוע
                                    איך זה עובד
                                    הערות באותה שורה (אותו Y) יופיעו זו לצד זו
                                    המרחק בין הערות נקבע על ידי nSidebarWidth + GetSpaceBetween()
                                    הערות בשורות שונות יופיעו אחת מתחת לשנייה כרגיל
                                    איך לבנות את הקוד
                                    דרישות מקדימות

                                    ודא שהכלים הבאים מותקנים:

                                    git --version # נדרש git
                                    cmake --version # נדרש cmake 3.15+
                                    make --version # או ninja
                                    gcc --version # gcc 7+ או clang 8+
                                    שלב 1: הורדת הקוד (אם עדיין לא הורד)

                                    Clone מלא (גדול! ~4GB)

                                    git clone https://gerrit.libreoffice.org/core libreoffice
                                    cd libreoffice

                                    או: clone רדוד יותר (מהיר יותר לפיתוח)

                                    git clone --depth=1 https://gerrit.libreoffice.org/core libreoffice
                                    cd libreoffice

                                    משיכת submodules

                                    git submodule update --init
                                    שלב 2: הגדרת build
                                    על Linux/macOS:
                                    ./autogen.sh
                                    --enable-debug
                                    --disable-online-update
                                    --without-java
                                    --without-help
                                    --without-myspell-dicts
                                    על Windows (MSYS2):
                                    ./autogen.sh --enable-debug --disable-online-update
                                    על Windows (WSL - מומלץ):

                                    התקנת WSL

                                    wsl --install

                                    בתוך WSL

                                    cd /mnt/e/המצאות/NAU\ WORD/2048/core
                                    ./autogen.sh --enable-debug --disable-online-update
                                    שלב 3: בנייה – רק מודול Writer (מהיר!)

                                    בנייה ראשונית מלאה (פעם אחת – עלולה לקחת 30-90 דקות)

                                    make -j$(nproc)

                                    לאחר שינויים בקבצי sw בלבד, בנה רק את המודול:

                                    make sw -j$(nproc)

                                    בנייה מהירה עוד יותר עם ninja:

                                    make -j$(nproc) build-nocheck
                                    שלב 4: בדיקת השינויים

                                    הרצת LibreOffice עם השינויים

                                    ./instdir/program/swriter

                                    פתח מסמך עם מספר הערות באותה שורה ובדוק שהן מופיעות זו לצד זו

                                    שלב 5: הרצת טסטים

                                    טסטים ספציפיים למודול Writer

                                    make sw_uicheck

                                    טסטים של annotations בלבד

                                    cd sw && make CppunitTest_sw_uiwriter
                                    נקודות תשומת לב
                                    אל תשנה את לוגיקת ה-anchor – רק את חישוב ה-X
                                    שמור על ה-POSTIT_SPACE_BETWEEN הקיים בין הערות
                                    בדוק מקרי קצה: הערה אחת בשורה (צריכה להתנהג כרגיל), הערות בעמודות שונות
                                    שים לב ל-RTL (עברית/ערבית) – המיקום האופקי מתהפך
                                    הקובץ הקריטי הוא PostItMgr.cxx – 90% מהשינוי שם
                                    חפש את הסמן mlPageBorder בקוד – כל מקום שמשתמש בו לציר X הוא מועמד לשינוי
                                    קבצים ששונו
                                    sw/inc/postithelper.hxx - שורה 106 (הוספת שדה mLayoutX)
                                    sw/source/uibase/docvw/PostItMgr.cxx - שורות 990-1139 (שינוי לוגיקת פריסה)
                                    סיכום
                                    השינויים האלו מאפשרים להערות שמקושרות לאותה שורה בטקסט להופיע זו לצד זו במקום אחת מתחת לשנייה. השינוי הוא מינימלי וממוקד, ומשתמש במנגנון הקיים של LibreOffice לפריסת הערות, רק עם לוגיקה שונה לחישוב המיקום האופקי.

                                    תאריך: 20 במאי 2026
                                    נכתב על ידי: Cascade (AI coding assistant)
                                    בקשה מקורית: לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות אחת אחרי השנייה באותה שורה

                                    י. פל.י
                                    י. פל.י
                                    י. פל.
                                    כתב ב נערך לאחרונה על ידי
                                    #99

                                    @בננה כתב:

                                    גענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                                    יש לי MAC, מאמין שיועיל.
                                    בטוח שזה אמור לעבוד בweb?

                                    ע"ה דכו"עע תגובה 1 תגובה אחרונה
                                    0
                                    • בננהב בננה

                                      @יאיר-דניאל,

                                      ביקשתי מה-AI ב-VS Code לסייע לי בבניית מהדורה של LibreOffice עם הערות ברצף. הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                                      ביקשתי ממנו לסכם את התהליך שביצע (או תכנן לבצע), ואני מצרף את הסיכום כאן בספוילר.

                                      # מיקום אופקי של הערות ב-LibreOffice Writer - תיעוד שינויים

                                      מי כתב את זה?
                                      אני Cascade, AI coding assistant מבית Cognition. המשתמש ביקש ממני לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות (comments/annotations) אחת אחרי השנייה באותה שורה במקום שכל הערה תתחיל בשורה חדשה.

                                      המטרה
                                      ב-LibreOffice Writer, כאשר מספר הערות מקושרות לאותה שורת טקסט, הן מופיעות אחת מתחת לשנייה בסרגל הצד. המטרה היא לאפשר שהערות שמקושרות לאותה שורה יופיעו זו לצד זו (אופקית) – ברצף, ולא כל אחת בשורה חדשה.

                                      ארכיטקטורת הקוד
                                      מודול Writer = sw/
                                      כל הקוד הרלוונטי נמצא תחת sw/source/uibase/docvw/

                                      קבצים מרכזיים
                                      קובץ תפקיד
                                      sw/source/uibase/docvw/PostItMgr.cxx הקובץ הראשי – ניהול ופריסת כל ההערות
                                      sw/inc/postithelper.hxx מבנה SwLayoutInfo + SwAnnotationItem
                                      לוגיקת הפריסה הנוכחית
                                      LayoutPostIts() ← נקראת בכל רענון
                                      └── LayoutByPage() ← מפרסת הערות לפי עמוד, מונעת חפיפה אנכית
                                      └── SetPosSizePixelRect() ← קובע מיקום וגודל לכל הערה
                                      כיצד נקבע המיקום כיום (לפני השינוי):

                                      // Y נקבע לפי מיקום ה-anchor בטקסט
                                      tools::Long nY = mpEditWin->LogicToPixel(
                                      Point(0, pItem->maLayoutInfo.mPosition.Bottom())).Y();

                                      // X נקבע תמיד לאותו ערך קבוע
                                      tools::Long nX = mlPageBorder; // ← הבעיה! תמיד אותו X
                                      השינויים שבוצעו
                                      שינוי 1: הוספת שדה mLayoutX למבנה SwAnnotationItem
                                      קובץ: sw/inc/postithelper.hxx

                                      שורה: 106

                                      תוכן השינוי:

                                      class SAL_DLLPUBLIC_RTTI SwAnnotationItem final
                                      {
                                      public:
                                      VclPtrsw::annotation::SwAnnotationWin mpPostIt;
                                      bool mbShow;
                                      bool mbFocus;
                                      bool mbPendingLayout;
                                      SwPostItHelper::SwLayoutStatus mLayoutStatus;
                                      SwLayoutInfo maLayoutInfo;
                                      tools::Long mLayoutX = 0; // מיקום אופקי מחושב ← שדה חדש
                                      הסבר: הוספתי שדה חדש mLayoutX למחלקה SwAnnotationItem כדי לשמור את המיקום האופקי המחושב של כל הערה.

                                      שינוי 2: שינוי לוגיקת הפריסה ב-PostItMgr.cxx
                                      קובץ: sw/source/uibase/docvw/PostItMgr.cxx

                                      פונקציה: LayoutPostIts()

                                      שורות: 990-1139

                                      תוכן השינוי:

                                      לפני השינוי (הקוד המקורי):
                                      for (auto const& pItem : pPage->mvSidebarItems)
                                      {
                                      if (pItem->mbShow)
                                      {
                                      // ... קוד ליצירת חלון הערה ...

                                          tools::Long Y = mpEditWin->LogicToPixel(
                                              Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                          
                                          // ... חישוב גובה ההערה ...
                                          
                                          pPostIt->SetPosSizePixelRect( mlPageBorder ,  // ← תמיד אותו X
                                                                        Y - GetInitialAnchorDistance(),
                                                                        nSidebarWidth,
                                                                        aPostItHeight,
                                                                        mlPageEnd );
                                      }
                                      

                                      }
                                      אחרי השינוי (הקוד החדש):
                                      // שלב א: קיבוץ הערות לפי Y וחישוב מיקום אופקי
                                      std::map<tools::Long, std::vector<SwAnnotationItem*>> aRowGroups;
                                      for (auto const& pItem : pPage->mvSidebarItems)
                                      {
                                      if (pItem->mbShow)
                                      {
                                      tools::Long Y = mpEditWin->LogicToPixel(
                                      Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                      aRowGroups[Y].push_back(pItem.get());
                                      }
                                      }

                                      // שלב ב: לכל קבוצת Y – הקצה X שונה לכל הערה
                                      tools::Long mlPageBorder = 0;
                                      tools::Long mlPageEnd = 0;

                                      if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::LEFT )
                                      {
                                      mlPageBorder = mpEditWin->LogicToPixel(Point(pPage->mPageRect.Left(), 0)).X() - nSidebarWidth;
                                      }
                                      else if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::RIGHT )
                                      {
                                      mlPageBorder = mpEditWin->LogicToPixel( Point(pPage->mPageRect.Right(), 0)).X() + GetSidebarBorderWidth(true);
                                      }

                                      for (auto& [nY, aGroup] : aRowGroups)
                                      {
                                      tools::Long nX = mlPageBorder;
                                      for (auto* pItem : aGroup)
                                      {
                                      pItem->mLayoutX = nX;
                                      // חשב את הרוחב של ההערה
                                      bool bCreated = false;
                                      VclPtr<SwAnnotationWin> pPostIt = GetOrCreateAnnotationWindow(*pItem, bCreated);
                                      if (bCreated)
                                      {
                                      aCreatedPostIts.insert(pPostIt);
                                      }

                                          tools::Long nTextHeight;
                                          if (pPostIt->GetSizePixel().Width() == nSidebarWidth)
                                              nTextHeight = pPostIt->GetPostItTextHeight();
                                          else
                                              nTextHeight = pPostIt->GuessTextHeightForWidth(nSidebarWidth);
                                      
                                          tools::Long postItPixelTextHeight
                                              = (comphelper::LibreOfficeKit::isActive()
                                                     ? mpEditWin->LogicToPixel(Point(0, nTextHeight)).Y()
                                                     : nTextHeight);
                                          tools::Long aPostItHeight
                                              = (postItPixelTextHeight < pPostIt->GetMinimumSizeWithoutMeta()
                                                     ? pPostIt->GetMinimumSizeWithoutMeta()
                                                     : postItPixelTextHeight)
                                                + pPostIt->GetMetaHeight();
                                      
                                          nX += nSidebarWidth + GetSpaceBetween();
                                      }
                                      

                                      }

                                      // שלב ג: השתמש ב-mLayoutX בקריאה ל-SetPosSizePixelRect
                                      for (auto const& pItem : pPage->mvSidebarItems)
                                      {
                                      if (pItem->mbShow)
                                      {
                                      // ... קוד ליצירת חלון הערה ...

                                          tools::Long Y = mpEditWin->LogicToPixel(
                                              Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                                          
                                          // ... חישוב גובה ההערה ...
                                          
                                          pPostIt->SetPosSizePixelRect( pItem->mLayoutX ,  // ← מיקום X מחושב
                                                                        Y - GetInitialAnchorDistance(),
                                                                        nSidebarWidth,
                                                                        aPostItHeight,
                                                                        mlPageEnd );
                                      }
                                      

                                      }
                                      הסבר:

                                      שלב א: קיבוץ הערות לפי מיקום Y (שורה בטקסט)
                                      שלב ב: לכל קבוצת Y, חישוב מיקום X שונה לכל הערה - הערות מקבלות מיקום X שונה בסדר
                                      שלב ג: שימוש ב-mLayoutX בקריאה ל-SetPosSizePixelRect במקום mlPageBorder קבוע
                                      איך זה עובד
                                      הערות באותה שורה (אותו Y) יופיעו זו לצד זו
                                      המרחק בין הערות נקבע על ידי nSidebarWidth + GetSpaceBetween()
                                      הערות בשורות שונות יופיעו אחת מתחת לשנייה כרגיל
                                      איך לבנות את הקוד
                                      דרישות מקדימות

                                      ודא שהכלים הבאים מותקנים:

                                      git --version # נדרש git
                                      cmake --version # נדרש cmake 3.15+
                                      make --version # או ninja
                                      gcc --version # gcc 7+ או clang 8+
                                      שלב 1: הורדת הקוד (אם עדיין לא הורד)

                                      Clone מלא (גדול! ~4GB)

                                      git clone https://gerrit.libreoffice.org/core libreoffice
                                      cd libreoffice

                                      או: clone רדוד יותר (מהיר יותר לפיתוח)

                                      git clone --depth=1 https://gerrit.libreoffice.org/core libreoffice
                                      cd libreoffice

                                      משיכת submodules

                                      git submodule update --init
                                      שלב 2: הגדרת build
                                      על Linux/macOS:
                                      ./autogen.sh
                                      --enable-debug
                                      --disable-online-update
                                      --without-java
                                      --without-help
                                      --without-myspell-dicts
                                      על Windows (MSYS2):
                                      ./autogen.sh --enable-debug --disable-online-update
                                      על Windows (WSL - מומלץ):

                                      התקנת WSL

                                      wsl --install

                                      בתוך WSL

                                      cd /mnt/e/המצאות/NAU\ WORD/2048/core
                                      ./autogen.sh --enable-debug --disable-online-update
                                      שלב 3: בנייה – רק מודול Writer (מהיר!)

                                      בנייה ראשונית מלאה (פעם אחת – עלולה לקחת 30-90 דקות)

                                      make -j$(nproc)

                                      לאחר שינויים בקבצי sw בלבד, בנה רק את המודול:

                                      make sw -j$(nproc)

                                      בנייה מהירה עוד יותר עם ninja:

                                      make -j$(nproc) build-nocheck
                                      שלב 4: בדיקת השינויים

                                      הרצת LibreOffice עם השינויים

                                      ./instdir/program/swriter

                                      פתח מסמך עם מספר הערות באותה שורה ובדוק שהן מופיעות זו לצד זו

                                      שלב 5: הרצת טסטים

                                      טסטים ספציפיים למודול Writer

                                      make sw_uicheck

                                      טסטים של annotations בלבד

                                      cd sw && make CppunitTest_sw_uiwriter
                                      נקודות תשומת לב
                                      אל תשנה את לוגיקת ה-anchor – רק את חישוב ה-X
                                      שמור על ה-POSTIT_SPACE_BETWEEN הקיים בין הערות
                                      בדוק מקרי קצה: הערה אחת בשורה (צריכה להתנהג כרגיל), הערות בעמודות שונות
                                      שים לב ל-RTL (עברית/ערבית) – המיקום האופקי מתהפך
                                      הקובץ הקריטי הוא PostItMgr.cxx – 90% מהשינוי שם
                                      חפש את הסמן mlPageBorder בקוד – כל מקום שמשתמש בו לציר X הוא מועמד לשינוי
                                      קבצים ששונו
                                      sw/inc/postithelper.hxx - שורה 106 (הוספת שדה mLayoutX)
                                      sw/source/uibase/docvw/PostItMgr.cxx - שורות 990-1139 (שינוי לוגיקת פריסה)
                                      סיכום
                                      השינויים האלו מאפשרים להערות שמקושרות לאותה שורה בטקסט להופיע זו לצד זו במקום אחת מתחת לשנייה. השינוי הוא מינימלי וממוקד, ומשתמש במנגנון הקיים של LibreOffice לפריסת הערות, רק עם לוגיקה שונה לחישוב המיקום האופקי.

                                      תאריך: 20 במאי 2026
                                      נכתב על ידי: Cascade (AI coding assistant)
                                      בקשה מקורית: לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות אחת אחרי השנייה באותה שורה

                                      המלאךה
                                      המלאךה
                                      המלאך
                                      מפתח
                                      כתב ב נערך לאחרונה על ידי
                                      #100

                                      @בננה כתב:

                                      הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                                      תוכל להריץ על גיטהאב קוד פייס.

                                      תגובה 1 תגובה אחרונה
                                      1
                                      • י. פל.י י. פל.

                                        @בננה כתב:

                                        גענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                                        יש לי MAC, מאמין שיועיל.
                                        בטוח שזה אמור לעבוד בweb?

                                        ע"ה דכו"עע
                                        ע"ה דכו"עע
                                        ע"ה דכו"ע
                                        כתב ב נערך לאחרונה על ידי
                                        #101

                                        @י.-פל. כתב:

                                        בטוח שזה אמור לעבוד בweb?

                                        לא כל כך... יש אולי כל מיני אפשרויות חיצוניות להריץ על ווב, אבל זה לא ממש מיועד לזה

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • צ
                                          צ
                                          צפניה
                                          כתב ב נערך לאחרונה על ידי צפניה
                                          #102

                                          @יאיר-דניאל משום מה חסום בחדרי מחשבים עבר מקום כי הקודמים כן נפתחו
                                          עריכה : הורדתי מהחנות תוספים אז זה לא כל כך דחוף, לי עכ"פ

                                          תגובה 1 תגובה אחרונה
                                          0
                                          • צ
                                            צ
                                            צפניה
                                            כתב ב נערך לאחרונה על ידי
                                            #103

                                            גם אצלי לא עובד המסך מלא, וכן הכל נהיה באותיות גדולות לא כמו בגירסאות המוקדמות 1.2.2 כמדומה

                                            יאיר דניאלי תגובה 1 תגובה אחרונה
                                            1

                                            שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

                                            נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

                                            בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

                                            הרשמה התחברות

                                            • התחברות

                                            • אין לך חשבון עדיין? הרשמה

                                            • התחברו או הירשמו כדי לחפש.
                                            • פוסט ראשון
                                              פוסט אחרון