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

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. עזרה הדדית - מחשבים וטכנולוגיה
  4. המלצה | נמאס לכם שג'מיני שוכח את תחילת השיחה? הכלי שיסדר לכם את העבודה! כולל כפתור שיעזור לכם להימנע מגלילות אינסופיות בבלוקי קוד

המלצה | נמאס לכם שג'מיני שוכח את תחילת השיחה? הכלי שיסדר לכם את העבודה! כולל כפתור שיעזור לכם להימנע מגלילות אינסופיות בבלוקי קוד

מתוזמן נעוץ נעול הועבר עזרה הדדית - מחשבים וטכנולוגיה
5 פוסטים 3 כותבים 60 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ר מנותק
    ר מנותק
    ר יעקב עייפים
    כתב נערך לאחרונה על ידי ר יעקב עייפים
    #1

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

    בניתי כלי קטן (תוסף דפדפן/Tampermonkey) שמשנה את חוקי המשחק לעובדים עם ג'מיני:

    מה הוא עושה?

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

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

    עיצוב מינימלי: הוא לא מציק בעיניים, נמצא בפינה ככפתור קטן ולא מפריע לזרימה של האתר.

    למי זה מיועד?
    לכל מי שמשתמש בג'מיני לעבודה אינטנסיבית ורוצה לעשות סדר בשיחות הארוכות שלו.

    התוסף בטוח לשימוש, לא דורש הרשאות מיוחדות, ונועד לעבוד ישירות בתוך הממשק של ג'מיני.

    תוסף דפדפן

    ‏‏Gemini-Pro-Extractor - עותק.rar
    גירסת Tampermonkey

    // ==UserScript==
    // @name         מחלץ שיחות + מקפל קודים ל-Gemini
    // @namespace    http://tampermonkey.net/
    // @version      3.0
    // @description  מחזיר לג'מיני את הזיכרון! חולץ שיחות ארוכות לגיבוי ומוסיף כפתורי קיפול לבלוקים של קוד.
    // @author       מתמחים טופ
    // @match        *://gemini.google.com/*
    // @grant        none
    // @run-at       document-end
    // ==UserScript==
    
    (function() {
        'use strict';
    
        const toggleBtn = document.createElement('button');
        toggleBtn.innerHTML = '🛠️ כלים';
        toggleBtn.style.cssText = 'position:fixed; bottom:20px; left:20px; z-index:999999; padding:8px 14px; background:#1e1e1e; color:#fff; border:1px solid #555; border-radius:20px; box-shadow:0 2px 10px rgba(0,0,0,0.3); cursor:pointer; font-size:13px; font-weight:bold; font-family:system-ui; direction:rtl; transition:0.2s;';
        document.body.appendChild(toggleBtn);
    
        const panel = document.createElement('div');
        panel.style.cssText = 'position:fixed; bottom:60px; left:20px; z-index:999998; padding:15px; background:#1a1a1c; color:#eee; border-radius:12px; box-shadow:0 5px 25px rgba(0,0,0,0.5); width:260px; border:1px solid #333; display:none; flex-direction:column; gap:12px; direction:rtl; font-family:system-ui;';
        panel.innerHTML = `
            <div style="display:flex; gap:5px;">
                <button id="foldAllBtn" style="flex:1; padding:8px; background:#333; color:#fff; border:none; border-radius:6px; cursor:pointer; font-size:12px; transition:0.2s;">📁 קפל קודים</button>
                <button id="unfoldAllBtn" style="flex:1; padding:8px; background:#333; color:#fff; border:none; border-radius:6px; cursor:pointer; font-size:12px; transition:0.2s;">📂 פתח קודים</button>
            </div>
            <div style="border-top:1px solid #333; margin:5px 0;"></div>
            <select id="extractFilter" style="padding:6px; border-radius:6px; border:1px solid #444; background:#222; color:#eee; font-size:12px; cursor:pointer;">
                <option value="both">📝 חלץ הכל (אני + AI)</option>
                <option value="user">👤 חלץ רק את הבקשות שלי</option>
                <option value="model">🤖 חלץ רק את התשובות</option>
            </select>
            <div id="statusText" style="font-size:11px; color:#8ab4f8; text-align:center; font-weight:bold;">סטטוס: ממתין</div>
            <div style="display:flex; gap:5px;">
                <button id="startBtn" style="flex:1; padding:8px; background:#1a73e8; color:white; border:none; border-radius:6px; cursor:pointer; font-size:12px; font-weight:bold;">▶️ טען</button>
                <button id="extractBtn" style="flex:1; padding:8px; background:#34a853; color:white; border:none; border-radius:6px; cursor:pointer; font-size:12px; font-weight:bold;">⏹️ חלץ</button>
            </div>
        `;
        document.body.appendChild(panel);
    
        toggleBtn.onclick = () => panel.style.display = panel.style.display === 'none' ? 'flex' : 'none';
    
        function injectFoldButtons() {
            const codeBlocks = document.querySelectorAll('pre:not(.has-fold-btn)');
            codeBlocks.forEach(pre => {
                pre.classList.add('has-fold-btn');
                const foldBtn = document.createElement('div');
                foldBtn.innerHTML = '👁️ הסתר/הצג קוד';
                foldBtn.style.cssText = 'background:#2d2d30; color:#8ab4f8; font-size:11px; padding:4px 8px; cursor:pointer; border-radius:4px; font-family:sans-serif; width:fit-content; margin-bottom:5px; border:1px solid #444; transition:0.2s; user-select:none;';
                foldBtn.onclick = (e) => {
                    e.stopPropagation();
                    const isHidden = pre.style.display === 'none';
                    pre.style.display = isHidden ? 'block' : 'none';
                    foldBtn.innerHTML = isHidden ? '👁️ הסתר קוד' : '📂 קוד מקופל (לחץ להצגה)';
                    foldBtn.style.background = isHidden ? '#2d2d30' : '#1e3a5f';
                };
                pre.parentNode.insertBefore(foldBtn, pre);
            });
        }
        setInterval(injectFoldButtons, 1000);
    
        panel.querySelector('#foldAllBtn').onclick = () => {
            document.querySelectorAll('pre.has-fold-btn').forEach(pre => {
                pre.style.display = 'none';
                const btn = pre.previousElementSibling;
                if(btn) { btn.innerHTML = '📂 קוד מקופל (לחץ להצגה)'; btn.style.background = '#1e3a5f'; }
            });
        };
    
        panel.querySelector('#unfoldAllBtn').onclick = () => {
            document.querySelectorAll('pre.has-fold-btn').forEach(pre => {
                pre.style.display = 'block';
                const btn = pre.previousElementSibling;
                if(btn) { btn.innerHTML = '👁️ הסתר קוד'; btn.style.background = '#2d2d30'; }
            });
        };
    
        let isScrolling = false;
    
        panel.querySelector('#startBtn').onclick = async () => {
            if (isScrolling) return;
            isScrolling = true;
            let cycle = 0;
            while (isScrolling) {
                cycle++;
                panel.querySelector('#statusText').innerText = `מגלגל למעלה (${cycle})...`;
                const messages = document.querySelectorAll('user-query, message-content, [data-message-author-role]');
                if (messages.length > 0) messages[0].scrollIntoView({ behavior: "smooth", block: "start" });
                const container = document.querySelector('main') || window;
                container.dispatchEvent(new WheelEvent('wheel', { deltaY: -5000, bubbles: true }));
                await new Promise(r => setTimeout(r, 2000));
            }
        };
    
        panel.querySelector('#extractBtn').onclick = () => {
            isScrolling = false;
            panel.querySelector('#statusText').innerText = "מעבד נתונים...";
            const filter = panel.querySelector('#extractFilter').value;
            const allMessages = document.querySelectorAll('user-query, message-content, [data-message-author-role]');
            let text = "";
            let count = 0;
            let seenTexts = new Set();
            
            allMessages.forEach(el => {
                let content = el.innerText || el.textContent;
                if (!content || content.trim() === "") return;
                content = content.trim();
                if (seenTexts.has(content)) return;
                seenTexts.add(content);
                
                let role = el.getAttribute('data-message-author-role');
                if (!role) role = el.tagName.toLowerCase() === 'user-query' ? 'user' : 'model';
                
                if (filter === 'both' || filter === role) {
                    count++;
                    const header = role === 'user' ? '👤 אני:' : '🤖 ג׳מיני:';
                    text += `${header}\n${content}\n\n========================================\n\n`;
                }
            });
    
            if (count === 0) {
                panel.querySelector('#statusText').innerText = "❌ אין הודעות לחילוץ!";
                return;
            }
    
            let chatTitle = document.title.replace(/\s*-\s*Gemini/i, '').trim();
            chatTitle = chatTitle.replace(/[^a-z0-9א-ת\s\-_()]/gi, '_').substring(0, 80) || "שיחת_Gemini";
    
            const blob = new Blob([text], { type: 'text/plain;charset=utf-8' });
            const a = document.createElement('a');
            a.href = URL.createObjectURL(blob);
            a.download = `${chatTitle}_(${filter}).txt`;
            a.click();
            
            panel.querySelector('#statusText').innerText = `✅ נשמר! (${count} פריטים)`;
        };
    })();
    
    מ תגובה 1 תגובה אחרונה
    2
    • ר ר יעקב עייפים

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

      בניתי כלי קטן (תוסף דפדפן/Tampermonkey) שמשנה את חוקי המשחק לעובדים עם ג'מיני:

      מה הוא עושה?

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

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

      עיצוב מינימלי: הוא לא מציק בעיניים, נמצא בפינה ככפתור קטן ולא מפריע לזרימה של האתר.

      למי זה מיועד?
      לכל מי שמשתמש בג'מיני לעבודה אינטנסיבית ורוצה לעשות סדר בשיחות הארוכות שלו.

      התוסף בטוח לשימוש, לא דורש הרשאות מיוחדות, ונועד לעבוד ישירות בתוך הממשק של ג'מיני.

      תוסף דפדפן

      ‏‏Gemini-Pro-Extractor - עותק.rar
      גירסת Tampermonkey

      // ==UserScript==
      // @name         מחלץ שיחות + מקפל קודים ל-Gemini
      // @namespace    http://tampermonkey.net/
      // @version      3.0
      // @description  מחזיר לג'מיני את הזיכרון! חולץ שיחות ארוכות לגיבוי ומוסיף כפתורי קיפול לבלוקים של קוד.
      // @author       מתמחים טופ
      // @match        *://gemini.google.com/*
      // @grant        none
      // @run-at       document-end
      // ==UserScript==
      
      (function() {
          'use strict';
      
          const toggleBtn = document.createElement('button');
          toggleBtn.innerHTML = '🛠️ כלים';
          toggleBtn.style.cssText = 'position:fixed; bottom:20px; left:20px; z-index:999999; padding:8px 14px; background:#1e1e1e; color:#fff; border:1px solid #555; border-radius:20px; box-shadow:0 2px 10px rgba(0,0,0,0.3); cursor:pointer; font-size:13px; font-weight:bold; font-family:system-ui; direction:rtl; transition:0.2s;';
          document.body.appendChild(toggleBtn);
      
          const panel = document.createElement('div');
          panel.style.cssText = 'position:fixed; bottom:60px; left:20px; z-index:999998; padding:15px; background:#1a1a1c; color:#eee; border-radius:12px; box-shadow:0 5px 25px rgba(0,0,0,0.5); width:260px; border:1px solid #333; display:none; flex-direction:column; gap:12px; direction:rtl; font-family:system-ui;';
          panel.innerHTML = `
              <div style="display:flex; gap:5px;">
                  <button id="foldAllBtn" style="flex:1; padding:8px; background:#333; color:#fff; border:none; border-radius:6px; cursor:pointer; font-size:12px; transition:0.2s;">📁 קפל קודים</button>
                  <button id="unfoldAllBtn" style="flex:1; padding:8px; background:#333; color:#fff; border:none; border-radius:6px; cursor:pointer; font-size:12px; transition:0.2s;">📂 פתח קודים</button>
              </div>
              <div style="border-top:1px solid #333; margin:5px 0;"></div>
              <select id="extractFilter" style="padding:6px; border-radius:6px; border:1px solid #444; background:#222; color:#eee; font-size:12px; cursor:pointer;">
                  <option value="both">📝 חלץ הכל (אני + AI)</option>
                  <option value="user">👤 חלץ רק את הבקשות שלי</option>
                  <option value="model">🤖 חלץ רק את התשובות</option>
              </select>
              <div id="statusText" style="font-size:11px; color:#8ab4f8; text-align:center; font-weight:bold;">סטטוס: ממתין</div>
              <div style="display:flex; gap:5px;">
                  <button id="startBtn" style="flex:1; padding:8px; background:#1a73e8; color:white; border:none; border-radius:6px; cursor:pointer; font-size:12px; font-weight:bold;">▶️ טען</button>
                  <button id="extractBtn" style="flex:1; padding:8px; background:#34a853; color:white; border:none; border-radius:6px; cursor:pointer; font-size:12px; font-weight:bold;">⏹️ חלץ</button>
              </div>
          `;
          document.body.appendChild(panel);
      
          toggleBtn.onclick = () => panel.style.display = panel.style.display === 'none' ? 'flex' : 'none';
      
          function injectFoldButtons() {
              const codeBlocks = document.querySelectorAll('pre:not(.has-fold-btn)');
              codeBlocks.forEach(pre => {
                  pre.classList.add('has-fold-btn');
                  const foldBtn = document.createElement('div');
                  foldBtn.innerHTML = '👁️ הסתר/הצג קוד';
                  foldBtn.style.cssText = 'background:#2d2d30; color:#8ab4f8; font-size:11px; padding:4px 8px; cursor:pointer; border-radius:4px; font-family:sans-serif; width:fit-content; margin-bottom:5px; border:1px solid #444; transition:0.2s; user-select:none;';
                  foldBtn.onclick = (e) => {
                      e.stopPropagation();
                      const isHidden = pre.style.display === 'none';
                      pre.style.display = isHidden ? 'block' : 'none';
                      foldBtn.innerHTML = isHidden ? '👁️ הסתר קוד' : '📂 קוד מקופל (לחץ להצגה)';
                      foldBtn.style.background = isHidden ? '#2d2d30' : '#1e3a5f';
                  };
                  pre.parentNode.insertBefore(foldBtn, pre);
              });
          }
          setInterval(injectFoldButtons, 1000);
      
          panel.querySelector('#foldAllBtn').onclick = () => {
              document.querySelectorAll('pre.has-fold-btn').forEach(pre => {
                  pre.style.display = 'none';
                  const btn = pre.previousElementSibling;
                  if(btn) { btn.innerHTML = '📂 קוד מקופל (לחץ להצגה)'; btn.style.background = '#1e3a5f'; }
              });
          };
      
          panel.querySelector('#unfoldAllBtn').onclick = () => {
              document.querySelectorAll('pre.has-fold-btn').forEach(pre => {
                  pre.style.display = 'block';
                  const btn = pre.previousElementSibling;
                  if(btn) { btn.innerHTML = '👁️ הסתר קוד'; btn.style.background = '#2d2d30'; }
              });
          };
      
          let isScrolling = false;
      
          panel.querySelector('#startBtn').onclick = async () => {
              if (isScrolling) return;
              isScrolling = true;
              let cycle = 0;
              while (isScrolling) {
                  cycle++;
                  panel.querySelector('#statusText').innerText = `מגלגל למעלה (${cycle})...`;
                  const messages = document.querySelectorAll('user-query, message-content, [data-message-author-role]');
                  if (messages.length > 0) messages[0].scrollIntoView({ behavior: "smooth", block: "start" });
                  const container = document.querySelector('main') || window;
                  container.dispatchEvent(new WheelEvent('wheel', { deltaY: -5000, bubbles: true }));
                  await new Promise(r => setTimeout(r, 2000));
              }
          };
      
          panel.querySelector('#extractBtn').onclick = () => {
              isScrolling = false;
              panel.querySelector('#statusText').innerText = "מעבד נתונים...";
              const filter = panel.querySelector('#extractFilter').value;
              const allMessages = document.querySelectorAll('user-query, message-content, [data-message-author-role]');
              let text = "";
              let count = 0;
              let seenTexts = new Set();
              
              allMessages.forEach(el => {
                  let content = el.innerText || el.textContent;
                  if (!content || content.trim() === "") return;
                  content = content.trim();
                  if (seenTexts.has(content)) return;
                  seenTexts.add(content);
                  
                  let role = el.getAttribute('data-message-author-role');
                  if (!role) role = el.tagName.toLowerCase() === 'user-query' ? 'user' : 'model';
                  
                  if (filter === 'both' || filter === role) {
                      count++;
                      const header = role === 'user' ? '👤 אני:' : '🤖 ג׳מיני:';
                      text += `${header}\n${content}\n\n========================================\n\n`;
                  }
              });
      
              if (count === 0) {
                  panel.querySelector('#statusText').innerText = "❌ אין הודעות לחילוץ!";
                  return;
              }
      
              let chatTitle = document.title.replace(/\s*-\s*Gemini/i, '').trim();
              chatTitle = chatTitle.replace(/[^a-z0-9א-ת\s\-_()]/gi, '_').substring(0, 80) || "שיחת_Gemini";
      
              const blob = new Blob([text], { type: 'text/plain;charset=utf-8' });
              const a = document.createElement('a');
              a.href = URL.createObjectURL(blob);
              a.download = `${chatTitle}_(${filter}).txt`;
              a.click();
              
              panel.querySelector('#statusText').innerText = `✅ נשמר! (${count} פריטים)`;
          };
      })();
      
      מ מנותק
      מ מנותק
      מחנה ידידים
      כתב נערך לאחרונה על ידי
      #2

      @ר-יעקב-עייפים ואיפה התוסף?

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

        @ר-יעקב-עייפים ואיפה התוסף?

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

        @מחנה-ידידים העלתי אני יעלה תכף את גירסת Tampermonkey.

        תגובה 1 תגובה אחרונה
        2
        • ר מנותק
          ר מנותק
          ר יעקב עייפים
          כתב נערך לאחרונה על ידי
          #4

          עלו שני הגירסאות.

          תגובה 1 תגובה אחרונה
          0
          • א מנותק
            א מנותק
            איש פלוני
            כתב נערך לאחרונה על ידי
            #5

            יש את זה בחנות התוספים של גוגל?

            תגובה 1 תגובה אחרונה
            0

            • התחברות

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

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • חוקי הפורום
            • פופולרי
            • לא נפתר
            • משתמשים
            • חיפוש גוגל בפורום
            • צור קשר